# stage all modified files being tracked
git add -u
# revert file
git checkout -- filepath
# change comment of last commit
git commit --amend
# unstage all files
git reset HEAD
# unstage one file
git reset HEAD -- filepath
# undo last commit (leaving files in index)
git reset --soft HEAD~
# undo last commit and unstage all files
git reset HEAD~
# revert to last local commit (throwing away changes)
git reset --hard
# revert changes of a merge
git reset --hard ORIG_HEAD
# show difference between the HEAD and the index
git diff --staged
# show diff between HEAD and both staged and unstaged changes (what would be committed with 'git commit -a')
git diff HEAD
# diff two branches
git diff --stat branch1...branch2
# show history
git log --graph --oneline
# find the most recent common ancestor of two branches
git merge-base branch1 branch2
# remove deleted files from git
git status | grep deleted | awk ' {print \$3}' | xargs git rm
# show information about your remotes
git remote show origin
# set up tracking remote branch
git remote add origin git@github.com:rgreenjr/foobar.git
# push local branch with tracking to remote repo
git push -u origin FEATURE_BRANCH
# pull remote branch to local repo
git fetch origin
git checkout --track origin/branch_name
# delete remote branch
git push origin --delete branch_name
# cleanup stale remote branches
git remote prune origin
# rebase development branch onto local feature branch (usually prior to merging feature branch onto development branch)
git checkout branch_name
git rebase development
# merge local feature branch onto development without fast-forwarding
git checkout development
git merge --no-ff branch_name
# add tag
git tag 1.2.3
git push origin v1.2.3
Contributing to Open Source
# clone the origianl repo
git clone git@github.com:USERNAME/FORKED_PROJECT.git
# add 'upstream' repo to list of remotes
git remote add upstream git@github.com:UPSTREAM_USER/ORIGINAL_PROJECT.git
# verify the new remote named 'upstream'
git remote -v
# create a new branch
git checkout -b FEATURE_BRANCH
# push new feature branch to cloned repo with tracking
git push -u origin FEATURE_BRANCH
Submitting a Pull Request
# fetch upstream master and merge with your repo's master branch
git fetch upstream
git checkout master
git merge upstream/master
# if there were any new commits, rebase your development branch
git checkout FEATURE_BRANCH
git rebase master