Git Command Reference

This page is a non-exhaustive and growing reference to help me remember git commands. Note: Do not include the < > brackets around the actual branch names, etc., they are used in the examples below to indicate a place holder.


# combine any staged changes with the contents of the previous commit
git commit --amend

# same as above and change the commit message
git commit --amend -am "my new commit message"


# list local branches
git branch

# list remote and local branches
git branch -a

# list remote branches
git branch -r

# rename current branch
git branch -m <newname>

# rename a local branch
git branch -m <oldname> <newname>

# push a new local branch to remote and track
git push -u origin <branchname>


Cloning is the first step when getting a repository from the server.
# download the repository into the current directory
git clone <url>

# download the repository into the current directory with a sub directory name you supply
git clone <url> <directory>


# create and checkout in one step
git checkout -b <branchname>

# copy file from another branch
git checkout <branchname> -- <filename>

# checkout a tag to a new branch
git fetch origin
git checkout tags/<tagname> -b <branchname>

Cherry Pick

# merge a specific commit into the current branch
git cherry-pick <commithash>


# delete local branch
git branch -d <branchname>

# delete remote branch
git push origin :<branchname>

# Git 1.7+
git push origin --delete <branchname>


# diff between two local branches
git diff branch_a..branch_b

# write the diff to a file
git diff branch_a..branch_b > C:\diff.txt

# common ancestor diff
git diff branch_a...branch_b
  • Press Q to exit diff
  • You can also add a file or folder name after the commands


# checkout a remote branch that does not exist on local
git fetch origin
git checkout --track origin/<remote branch name>

# checkout a remote branch to a new local branch
git fetch origin <remote branch name>:<local branch name>


# shows the commit logs.
git log

# not in origin
git log origin..HEAD
  • git log outputs with the less program, making it scrollable. Type q to exit. Type h for help.
  • origin..HEAD specifies all the commits reachable from the current commit (i.e. HEAD), but not from origin.


# get rid of 'your branch is ahead of origin <branchname> by X commits
git pull origin <branchname>

git pull origin


# reapply commits on top of another base tip
git rebase

# squash four commits into one
git rebase -i HEAD~4
  • Squash info: Git Book Chapter 6.4: Git Tools – Rewriting History. The editor will list the 4 commits starting with the oldest. Replace the word “pick” with “squash” next to each commit you want to squash into the commit before it.
  • Editor: press i to enter inline insert mode. Use the delete key to erase from left to right, press esc to exit insert mode, then type :x (now the cursor is at the bottom) and hit enter to save and exit.
  • You can edit your last commit message before pushing with git commit --amend
If you’ve already pushed commits to GitHub, and then squash them locally, you will have to force the push to your branch.
git push origin <branchname> --force


# reset to previous state
git reset --hard

# reset to previous commit
git reset --hard <commit hash>

# reset to origin
git reset --hard origin/<branchname> 
  • git reflog to show what has been done with git session


# stash changes in a dirty working directory

# remove and apply stash
git-stash pop

# list stashes
git stash list

# apply stash
git-stash apply


# add a lightweight tag to by specifying the
# commit checksum (or part of it) at the end of the command
git tag sometagname ed40a9deaa0
git push origin sometagname

# delete a tag
git tag -d sometagname
git push origin :refs/tags/sometagname


In Git version 2.16+, git command output is sent to the editor. To change this, set pager.branch false. more info

# set paged output for git branch to off
git config --global pager.branch false

Additional Resources

Loading Disqus Comments ...
Loading Facebook Comments ...