8. 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)
9. 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)
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, 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)
13. 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
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
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)
17. 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)
18. 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
19. RECOVERING THE PAST
git checkout id (change to id commit)
git checkout id -- file
(change only file to id commit)
20.
21. 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)
22. WHEN SOMETHING GOES WRONG
(MERGE CONFLICTS)
Use a mergetool!
Double-Check before committing
Merging often avoid long and difficult merge
conflicts
23. WHEN SOMETHING GOES WRONG
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, I PUSHED MY
CHANGES...
git revert commit (new commit undoing specified commit)
26. 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)
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 (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/
29. QUESTIONS?
Thanks for your
attention
@jaimebuelta
wrongsideofmemphis.worspress.com
Editor's Notes
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
Not a fan of gui tools for everything, though\n
Very useful also for merges\n
\n
\n
\n
\n
For pointer branches, ideally, should be merged back immediately when a hot fix arrises\n
\n
\n
When something goes wrong\n
\n
Run tests, if possible\n
Reflog shows the pointers to the branches, etc on the last actions. Good for bad rebases/merges/pull\n