Pivotal Labs

Main menu

Skip to primary content
Skip to secondary content
  • About
  • Case Studies
  • Team
    • Executives
    • Locations
      • San Francisco (HQ)
      • Boston
      • Boulder
      • Denver
      • London
      • Los Angeles
      • New York
  • Community
    • Blogs
    • Tech Talks
    • Events
  • Careers
    • Lifestyle
    • Principles & Practices
    • Benefits
    • FAQ
    • Apply
  • Contact
    • Press Room
    • Press Releases
    • In The News
    • Press Kit
  • All
  • Labs
  • Standup
  • Tracker

Railsconf: Smacking Git Around – Advanced Git Tricks Scott Chacon (GitHub)

Pivotal Labs
Tuesday, May 5, 2009

Presentation

Cheat Sheet

Range selection:

  • Full SHA1
  • Partial SHA1 – at least 4 characters and unique
  • Branch, remote or tag name
  • Caret parent: master^^ (2nd parent of master)
  • Tilde spec: master~2 (2nd parent of master)
  • Combination: master~2^2
  • Blob spec: default:path/to/file
  • Relative spec: master@{yesterday} (relative to your machine)
  • master@{5} the 5th last value of master (locally)
  • [old]..[new] everything reacable from new but not from old
  • jes/master..master
  • jes/master..c36ae

Log usage:

  • git log origin/master.. or origin/master..HEAD only the commits that are going to go upstream
  • git log ..origin/master or HEAD..origin/master everything that origin/master has that you do not
  • git log master –not origin/master
  • git log master –not origin/master
  • git log –graph gives an ascii graph of listory

Diff:

  • git diff HEAD…topic go backto a common ancestor before diffing – gives better results`
  • git commit –ammend modify the last commit

Rebasing:

  • Replay the changes in my branch on top of another branch.
  • rebase –onto use for transplating a topic branch.
  • To transplant some of a topic branch, create a new branch to refer to the part you don’t want then do a rebase –onto.
  • git rebase -i <ref> interactvely pick/redorder/squash by editing a list/script.
  • DO NOT rebase using any commits you have already pushed upstream.

Filter Rebranch:

  • git filter-branch –tree-filter ‘rm -f filename’ HEAD Remove all instances of a file from every commit.

Subtree merging:

  • Alternative to submodules. Looks way complex. Tim Dysinger wrote rake tasks go do this. Google it.

Patch Staging

  • git add -p patch staging – interactively stage only some hunks of a file.

Debugging

  • Annotation: git blame
  • git blame -C <file> even if your like was moved from another file, produce a blame report for it.
  • git bisect

    git bisect start
    git bisect bad (Assumes HEAD)
    git bisect good 3acb4

    takes range you just specified, picks the middle commit nad checks it out, you call it good or bad, wash rince repeat.

    git bisect reset # when you are done.

Customization

  • git config –global help.autocorrect 1 – Stop git com complaining.
  • git config –global color.ui auto
  • Configure external merge tool.
  • .gitattributes for this class of files that match this pattern, treat them differently: e.g. diff binary files echo ‘*.png diff=exif’ >> .gitattributes and add a gitconfig line describing the exif diff strategy.
  • 0 Shares
  • Share on Facebook
  • Share on Twitter

One comment

  1. toothrot says:

    My favorites for big projects (missing from here):

    To find those pesky build-breaking commits:
    git bisect start HEAD HEAD@{one.day.ago}
    git bisect run rake

    Notably, REF@{one.day.ago} being very awesome.

    May 5, 2009 at 11:28 pm

Add New Comment Cancel reply

Your email address will not be published.

Pivotal Labs

Pivotal Labs

Recent Posts

  • Does the set of all sets contain itself?
  • Standup 3/8/2012
  • Standup 3/7/2012
Subscribe to Pivotal's Feed

Author Topics

riddles (1)
agile (167)
capistrano (2)
rails (26)
movember (1)
git (10)
railsdoc (1)
object-design (1)
bdd (3)
cucumber (3)
linkedin (1)
oauth (1)
ruby (17)
tdd (2)
lvh.me (1)
rails 3.1.1 (1)
selenium (6)
homebrew (1)
mysql (5)
rvm (1)
sproutcore (1)
paperclip (2)
pry (1)
amazon (1)
heroku (1)
rails3 (2)
jasmine (3)
design (3)
process (12)
productivity (8)
learning (1)
olin (1)
migrations (2)
mongodb (2)
devise (2)
javascript (13)
rubymine (4)
ipad (1)
whurl (1)
head.js (1)
pairing (2)
tools (4)
pair programming (1)
rspec (10)
rspec2 (1)
ruby19 (1)
incubation (3)
startup (5)
api (1)
presenter (1)
vanna (1)
pivotal tracker (5)
capybara (1)
fakeweb (1)
webmock (1)
intern (1)
ruby on rails (25)
meetup (1)
textmate (1)
testing (20)
solr (4)
nyc-standup (11)
community (1)
opensource (3)
activerecord (4)
chrome (1)
mp4 (1)
activeresource (1)
flash (3)
neo4j (1)
nginx (1)
rsoc (1)
meta programming (1)
agile standup (7)
government (3)
webos (4)
xss (1)
jquery (1)
bundler (2)
ci (3)
gems (5)
postgresql (1)
geminstaller (1)
gemcutter (1)
cloud (2)
rack (2)
refraction (1)
gem (5)
refactoring (1)
validations (1)
webrat (1)
engine-yard (1)
firefox (2)
jsunit (1)
mongrel (2)
thin (1)
unicorn (1)
facebook (1)
rubygems (5)
jruby (1)
actioncontroller (1)
rails 2.3 (1)
palmpre (1)
autotest (1)
mac (2)
hosting (1)
goruco (11)
database (3)
railsconf (11)
gogaruco (4)
deployment (4)
github (1)
ie (1)
ajax (1)
intellij (1)
json (1)
asset packaging (1)
polonium (1)
character encoding (1)
utf-8 (1)
test (3)
civics (1)
hpricot (1)
rake (3)
sms (1)
unicode (1)
iphone (1)
java (1)
safari (1)
memory leaks (1)
rr (3)
editor (1)
css (1)
nyc (3)
performance (5)
fun (5)
enterprise rails (1)
health (1)
new and cool (1)
general (2)
treetop (1)
errors (1)
stack (1)
trace (1)
cache (1)
cookies (1)
freesoftware (1)
conferences (1)
development (1)
driven (1)
proxy (1)
caching (1)
peertopatent (1)
languages (1)
rest (2)
rubyforge (1)
sake (1)
file (1)
upload (1)
constants (1)
osx (1)
terminal (1)
pairprogramming (2)
  • About
  • Case Studies
  • Team
  • Community
  • Careers
  • Contact
  • Labs
  • Events

Contact Us

contact@pivotallabs.com
+1 415-77-PIVOT
TwitterLinkedInFacebook

Pivotal Tracker

Tracker is the award-winning agile project management tool that enables real-time collaboration around a shared, prioritized backlog.
Visit pivotaltracker.com >