— Written by Triangles on June 01, 2015
• updated on January 25, 2018
• ID 1 —
Carefully crafted for the absent-minded.
I type git
in the command line on a daily basis, but I keep on forgetting most of the core commands available. Especially if I don't use them so frequently. The following list contains what I need to remember about Git. I will update it as needed.
Rename branches
action |
command |
rename the current branch |
git branch -m <new-name> |
rename a different branch |
git branch -m <old-branch-name> <new-branch-name> |
Delete branches
action |
command |
delete a local branch |
git branch -d <branch-name> |
force delete a local branch (if not fully merged) |
git branch -D <branch-name> |
delete a remote branch |
git push origin --delete <branch-name> |
Track/untrack branches
action |
command |
unset upstream from the current branch |
git branch --unset-upstream |
set upstream to another local branch |
git branch --set-upstream <local-branch> origin/<remote-branch> |
Push commits
action |
command |
push to a new remote branch |
git push <remote-name> <local-branch-name>:<remote-branch-name> |
(as above, shorter) |
git push <remote-name> <branch-name> |
Checkout
action |
command |
temporarily switch to a different commit1 |
git checkout <commit-hash> |
switch to a different commit and delete history |
git checkout --hard <commit-hash> |
1: This command generates a detached head status. git checkout <branch-name>
will get you back on the previous branch, while git checkout -b <new-branch-name>
will move the current state to a new branch.
Undo things
action |
command |
undo all unstaged changes |
git checkout -- . |
undo specific unstaged file |
git checkout -- <file-name> |
reset to specific commit, throwing away uncommitted changes |
git reset --hard <commit-hash> |
reset to specific commit, leaving your current files untouched1 |
git reset --soft <commit-hash> |
change the most recent commit message (locally) |
git commit --amend |
1: Useful to undo accidental commits.
Stash things
action |
command |
stash all unstaged files |
git stash |
unstash all stashed files |
git stash pop |
delete all stashes |
git stash clear |
Diff, show
action |
command |
show code changes between two branches |
git diff <branch-1>..<branch-2> |
show what files have changed between two branches |
git diff --stat <branch-1>..<branch-2> |
compare file between two commits (works also in different branches) |
git diff <commit-hash-1>..<commit-hash-2> <file> |
show a file in another branch |
git show <branch>:<file> |
show files changed between two commits |
git diff --name-only <commit-hash-1> <commit-hash-2> |
(as above, using HEAD ) |
git diff --name-only HEAD~[M] HEAD~[N] |
show diff on staged files |
git diff --staged |
Tagging
action |
command |
show all tags |
git tag --list |
create a new annotated* tag |
git tag -a <tag-title> -m '<tag-message>' |
create a new lightweight* tag |
git tag <tag-title> |
push all tags to a remote repository |
git push --tags |
push a specific tag to a remote repository |
git push origin <tag-name> |
checkout to a specific tag |
git checkout tags/<tag-name> |
delete local tag |
git tag --delete <tag-name> |
delete remote tag |
git push --delete origin <tag-name> |
*: Annotated tags are meant for release while lightweight tags are meant for private or temporary object labels (source).
Info
action |
command |
show origin |
git remote show origin |