Git cheat sheet

Add

git add -p - interactive commit all your local changes

History

git commit --amend -m - change last commit: discard last commit and save local changes with new description

git reset - reset index (discard all changes with command git add)

git reset file - remove the specified file from the staging area, but leave the working directory unchanged

git reset HEAD~ - explicity reset to specified commit (in this case - last)

git reset --hard 777f - reset to commit 777f, without saving changes and without creating new commit

git revert 777f - revert to commit 777f (only changes in selected commit) and with creating new commit

Difference

git diff - show difference between index and working directory

git diff --staged - show difference between index and current commit

git diff --name-only --diff-filter=U - show files with conflicts after merge

Rebase

git rebase -i HEAD~n - edit history for commit n

git-rebase master topic - apply commits from branch topic on last commit in branch master

Branch

git branch - show current branch

git branch --all - show local and remote branches

git branch -d foo - delete branch with name foo

git branch -m foo - rename current branch to foo

git checkout 777f - switch to commit 777f and save all subsequent commits

git checkout 777f file.txt - recovery file.txt to state in commiet 777f and save all subsequent commits

git checkout some-other-branch - switch to branch some-other-branch

git checkout -b feature - create branch feature and switch to it

git checkout branch2; git merge branch1 - merge branch1 into branch2

Search

git grep 'foo' - search working directory for foo

git grep -e 'first' --and -e 'another' - search working directory for first and second

Show

git blame file - show edit information about file

git log dir/ - show commits that modify files in the directory dir

git log --stat - show commits with aux info: file name and amount of changes on it

git log -p - show log in form of patch

git log --dirstat - show log with commits in directories

git shortlog - group commits by author

git ls-tree -r --name-only 777f - show files that was changed in commit 777f

git show 777f - show changes in commit 777f

git show-ref master - show ID of last commit in all branches

Tags

git tag -l - list all tags

git tag stable2 777f - mark commit 777f with tag stable2

Clean

git clean -f -d - remove all untracked files and directories

Useful patterns

Quickly fix some bug (current branch is master)

git commit -a -m "save master"
git checkout -b fixes 777f
git commit -a -m "save fixes"
git checkout master
git merge fixes
git diff --merge # show conflicts

Fix wrong commit

# wrong commit
git commit

# reset to previous state
git reset --soft HEAD^

# fixes
edit WRONGFILE
edit ANOTHERWRONGFILE

# staging
git add .
git commit -c ORIG_HEAD 

Check for errors and remove trash

git fsck
git count-objects
git gc 

Emergency fix (with stashing current changes in working directory)

git stash
vim file_to_fix.txt
git commit -a -m "Fix in a hurry"
git stash pop

Updating a forked repository

# add the upstream remote repository
git remote add upstream https://github.com/angular/angular.js.git

# fetch all files from all branches from the upstream repository
git fetch upstream

# switch to the branch you're working on
git checkout master

# rebase to replay all of the deltas from your previous commits on top
# of the files you just pulled down with the fetch.
git rebase upstream/master

# push your changes back up to your own remote fork
# the -f flag is to force the push and ignore checks and make sure
# that the remote doesn't have issues reconciling which deltas to trust
git push -f origin master

Additional information

comments powered by Disqus