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.
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>
# list local branches $ git branch # list remote and local branches $ git branch -a # list remote branches $ git branch -r # create and checkout in one step $ git checkout -b <branchname> # rename a local branch $ git branch -m <oldname> <newname> # push a new local branch to remote and track $ git push -u origin <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>
# get rid of 'your branch is ahead of origin <branchname> by X commits $ git pull origin <branchname> $ git pull origin
# 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"
# 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
Discard changes / commits
# discard local changes for all unstaged file $ git checkout -- . # discard local commits $ git reset --hard origin/<branchname>
# delete local branch $ git branch -d <branchname> # delete remote branch $ git push origin :<branchname> # Git 1.7+ $ git push origin --delete <branchname>
# reset to previous state $ git reset --hard
git reflogto show what has been done with git session
# 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.
# 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
- 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
Tips & Tricks
Clone into an existing folder?
This can’t be done, however, workaround by cloning to a new directory, then moving the .git directory into the existing directory.
$ git clone https://gitlab.com/myrepo.git temp # move .git from temp to myrepo directory $ mv temp/.git myrepo/.git # delete temp directory $ rm -rf temp