use git the proper way or How I learned to stop worrying and love rebase Jaime Buelta
BASIC CONCEPTS
INDEX LOCAL REPOSITORY (staging area) (HEAD) WORKPATH The files in your What you are Tracked by git hard drive going to commit
COMMIT TREE
different names for a commit HEAD master HEAD^ SHA1: 01d1d5ac9bc28e10902f99a15f9fd979d449adb2 b12 origin/HEAD origin/master
Version control systems are communication tools They DON'T replace ALL communication (just make it easier)
BUSINESS AS USUAL
BASIC LOCAL WORKFLOW git add (append to index) git rm (append removal of file to index) git checkout file (retrieve file from index) git reset HEAD file (remove from index)
WORKING WITH THE STASH git stash (push your workpath to the stash) git stash pop (retrieve last changes on stash) git stash list (list all changes on stash) git stash drop (remove last changes on stash)
COMMIT STRATEGIES commit small, commit often each commit should be an atomic related change of the code add reference number double check before committing
MEASURE TWICE, CUT ONCE git status (show index and workpath status) git log [–graph] (show commit log) graphical tools to show log gitg (Linux), gitx (Mac), tig (Command line), gitk, SourceTree git gui (can add individual lines to the index)
USE A DIFFTOOL
DIFF AND DIFFTOOL git diff git diff id diff between workpath diff between workpath and id and index git diff id id2 git diff -- file diff between id1 and id2 diff one file git diff --cached diff between index and HEAD
REMOTE REPOSITORY git fetch (get changes from remote repo) git pull (get remote branch and apply on top of local) git push (try to apply local changes to remote repo) git pull = fetch + merge git pull --rebase = fetch + rebase
MERGE VS REBASE develop new_feature new_feature new_feature develop develop merge rebase
WORKING WITH BRANCHES git checkout branch (change to local branch) git checkout -b branch (create new branch) git branch –track branch origin/branch (track remote branch) git merge branch (merge branch into current branch) git rebase branch (rebase current branch on top o of branch)
NOT ALL BRANCHES ARE CREATED EQUAL Local branches (so be careful when pushing changes) Feature/experimental branch (that should be merged back to the main branch) “Pointer” branch (a particular previous commit of permanent branch, like master) Main, permanent branch (develop/master)
BRANCH STRATEGIES When working on a feature, merge back often to avoid big discrepancies with main branch In general, try to use rebase instead of merge If hotfixing, use cherry-pick to keep main branch up- to-date Limit the number of branches
RECOVERING THE PAST git checkout id (change to id commit) git checkout id -- file (change only file to id commit)
WHEN SOMETHING GOES WRONG (AND YOU KNOW WHAT IT IS) Try not to push your error to the repository git commit --amend (fix your last commit) git reset (change your index/HEAD) git reset –soft (don't change your workspace) git reset –hard (change your workspace)
WHEN SOMETHING GOES WRONG (MERGE CONFLICTS) Use a mergetool! Double-Check before committing Merging often avoid long and difficult merge conflicts
WHEN SOMETHING GOES WRONG ON A REBASE/MERGE/PULL (AND YOU KNOW WHAT IT IS) git reflog (show branch tag in previous commands)
UNDO A REBASE new_feature master ORIG_HEAD rebase git reset –hard ORIG_HEAD
TOO LATE, I PUSHED MY CHANGES... git revert commit (new commit undoing specified commit)
WHEN SOMETHING GOES WRONG (AND YOU HAVE NO CLUE ABOUT WHAT IT IS) git blame file (show each line with writer and SHA) git grep pattern (search pattern in git-tracked files) git log -Spattern (pickaxe - search commits that change pattern) gitk file (show commits related to file) git bisect (walk through commits to find which one introduces a bug)
SOME CONFIGURATION OPTIONS COLORS! git config color.ui true ssh keys to repo No more typing passwords merge tool and difftool autocorrect git config help.autocorrect 2 (0.2 sec)
RESOURCES Git doc (same as man files) http://www.kernel.org/pub/ software/scm/git/docs/ Pro git http://progit.org/book/ (lot about the internals) Git community book http://book.git-scm.com/ Cheat sheet http://ndpsoftware.com/git-cheatsheet.html StackOverflow http://stackoverflow.com/
QUESTIONS? Thanks for your attention @jaimebuelta wrongsideofmemphis.worspress.com

Use git the proper way

  • 1.
    use git theproper way or How I learned to stop worrying and love rebase Jaime Buelta
  • 2.
  • 3.
    INDEX LOCAL REPOSITORY (staging area) (HEAD) WORKPATH The files in your What you are Tracked by git hard drive going to commit
  • 4.
  • 5.
    different names fora commit HEAD master HEAD^ SHA1: 01d1d5ac9bc28e10902f99a15f9fd979d449adb2 b12 origin/HEAD origin/master
  • 6.
    Version control systems arecommunication tools They DON'T replace ALL communication (just make it easier)
  • 7.
  • 8.
    BASIC LOCAL WORKFLOW gitadd (append to index) git rm (append removal of file to index) git checkout file (retrieve file from index) git reset HEAD file (remove from index)
  • 9.
    WORKING WITH THESTASH git stash (push your workpath to the stash) git stash pop (retrieve last changes on stash) git stash list (list all changes on stash) git stash drop (remove last changes on stash)
  • 10.
    COMMIT STRATEGIES commit small,commit often each commit should be an atomic related change of the code add reference number double check before committing
  • 11.
    MEASURE TWICE, CUTONCE git status (show index and workpath status) git log [–graph] (show commit log) graphical tools to show log gitg (Linux), gitx (Mac), tig (Command line), gitk, SourceTree git gui (can add individual lines to the index)
  • 12.
  • 13.
    DIFF AND DIFFTOOL gitdiff git diff id diff between workpath diff between workpath and id and index git diff id id2 git diff -- file diff between id1 and id2 diff one file git diff --cached diff between index and HEAD
  • 14.
    REMOTE REPOSITORY git fetch(get changes from remote repo) git pull (get remote branch and apply on top of local) git push (try to apply local changes to remote repo) git pull = fetch + merge git pull --rebase = fetch + rebase
  • 15.
    MERGE VS REBASE develop new_feature new_feature new_feature develop develop merge rebase
  • 16.
    WORKING WITH BRANCHES gitcheckout branch (change to local branch) git checkout -b branch (create new branch) git branch –track branch origin/branch (track remote branch) git merge branch (merge branch into current branch) git rebase branch (rebase current branch on top o of branch)
  • 17.
    NOT ALL BRANCHESARE CREATED EQUAL Local branches (so be careful when pushing changes) Feature/experimental branch (that should be merged back to the main branch) “Pointer” branch (a particular previous commit of permanent branch, like master) Main, permanent branch (develop/master)
  • 18.
    BRANCH STRATEGIES When workingon a feature, merge back often to avoid big discrepancies with main branch In general, try to use rebase instead of merge If hotfixing, use cherry-pick to keep main branch up- to-date Limit the number of branches
  • 19.
    RECOVERING THE PAST gitcheckout id (change to id commit) git checkout id -- file (change only file to id commit)
  • 21.
    WHEN SOMETHING GOESWRONG (AND YOU KNOW WHAT IT IS) Try not to push your error to the repository git commit --amend (fix your last commit) git reset (change your index/HEAD) git reset –soft (don't change your workspace) git reset –hard (change your workspace)
  • 22.
    WHEN SOMETHING GOESWRONG (MERGE CONFLICTS) Use a mergetool! Double-Check before committing Merging often avoid long and difficult merge conflicts
  • 23.
    WHEN SOMETHING GOESWRONG ON A REBASE/MERGE/PULL (AND YOU KNOW WHAT IT IS) git reflog (show branch tag in previous commands)
  • 24.
    UNDO A REBASE new_feature master ORIG_HEAD rebase git reset –hard ORIG_HEAD
  • 25.
    TOO LATE, IPUSHED MY CHANGES... git revert commit (new commit undoing specified commit)
  • 26.
    WHEN SOMETHING GOESWRONG (AND YOU HAVE NO CLUE ABOUT WHAT IT IS) git blame file (show each line with writer and SHA) git grep pattern (search pattern in git-tracked files) git log -Spattern (pickaxe - search commits that change pattern) gitk file (show commits related to file) git bisect (walk through commits to find which one introduces a bug)
  • 27.
    SOME CONFIGURATION OPTIONS COLORS! git config color.ui true ssh keys to repo No more typing passwords merge tool and difftool autocorrect git config help.autocorrect 2 (0.2 sec)
  • 28.
    RESOURCES Git doc (sameas man files) http://www.kernel.org/pub/ software/scm/git/docs/ Pro git http://progit.org/book/ (lot about the internals) Git community book http://book.git-scm.com/ Cheat sheet http://ndpsoftware.com/git-cheatsheet.html StackOverflow http://stackoverflow.com/
  • 29.
    QUESTIONS? Thanks for your attention @jaimebuelta wrongsideofmemphis.worspress.com

Editor's Notes