It has been about a year since using Git regularly and I have since forgotten a lot of the commands. This page is a non-exhaustive and growing reference to help me remember them. 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>
# 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..HEADspecifies 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 reflogto show what has been done with git session
# stash changes in a dirty working directory git-stash # 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