Git commands cheat sheet
| Command | Effect |
|---|---|
| CREATE COMMANDS | |
| git init | Create a new local git repository |
| git clone https://github.com/rohit-patel/Git-Cheat-Sheet | Clone a remote repository locally |
| LOCAL CHANGES | |
| git status | Get update on locally changed files |
| git diff | Show difference between working directory and staging area |
| git diff --staged | Show difference between staging area and last commit |
| git add <files> | Add <files> to the next commit (stage) |
| git add . | Add all existing changes, including untracked files but excluding ignored files, to the next commit |
| git add -p <file> | Add selective changes(hunks) in <file> to the next commit interactively |
| git restore --staged <files> | Unstage <files> |
| git restore --staged . | Unstage all files |
| git restore <files> | Discard changes of <files> in working directory. Revert to staged version |
| git restore . | Discard all changes in working directory. Revert to staged version |
| git commit -a | Stage and Commit all changes of currently tracked files |
| git commit | Commit staged changes |
| git commit -m "message" | Commit staged file with commit message without invoking editor |
| git commit --amend | Amend the last commit |
| COMMIT HISTORY | |
| git log | Show all commits reachable from HEAD, newest first |
| git log <commit1> ^<commit2> | Show all commits reachable from commit1 but isn't reachable by commit2. Branch name instead of commit hash can also be used |
| git log -p | Show changes alongwith each commit reachable from HEAD |
| git log -p -- <file> | Show changes of each commit reachable from HEAD |
| git log -p <commit> -- | Show changes of each commit reachable from <commit> |
| git log --since="2 weeks ago" -- <file> | Show changes during last two weeks to file <file> |
| git log --stat --summary | Show overview of changes alongwith commits reachable from HEAD |
| git blame <file> | See change history in <file> by user |
| BRANCHES AND TAGS | |
| git branch | List all existing local branches |
| git branch -r | List all existing remote branches |
| git branch -a | List all existing branches from both local and remote |
| git branch -v | List all existing local branches alongwih sha1 and subject line of last commit of each branch |
| git branch --merged | List of branches already merged into current branch |
| git branch --no-merged | List of branches not merged into current branch |
| git switch <branch> | Switch HEAD to <branch> |
| git checkout <branch> -- | Switch HEAD to <branch>. switch command is safer than this |
| git branch <new_branch> | Create branch <new_branch> based on current HEAD |
| git branch <new_branch> <base_branch> | Create branch <new_branch> based on <base_branch> |
| git branch <new_branch> <tag_name> | Create branch <new_branch> based on tag <tag_name> |
| git switch -c new-branch | To create and swtich to new branch in one go |
| git checkout --track <remote/branch> | Create new local branch based on a remote branch1 and switch to new branch |
| git branch --track <remote/branch> | Create new local branch based on a remote branch1 |
| git branch -d <branch> | Delete local <branch>. Prevents deletion of unmerged branch |
| git branch -D <branch> | Delete local <branch>. Unsafe as it can delete unmerged branch |
| git tag <tag_name> | Create ligthweight tag for current commit |
| git tag -a <tag_name> -m "tag message" | Create annotated tag for current commit |
| git tag <tag_name> <commit checksum> | Create ligthweight tag for specified commit |
| git tag | List tags in alphabetical order |
| git tag -l <pattern> | List tags matching <pattern> |
| git tag -d <tag_name> | Delete tag <tag_name> |
| UPDATE AND PUBLISH | |
| git remote | Shows a list of existing remotes |
| git remote -v | List all currently configured remotes alongwith remote url |
| git ls-remote <remote> | List references2 in remote repository <remote> |
| git remote show <remote> | Show information about a remote |
| git remote add <shortname> <url> | Add new <remote> repository |
| git fetch <remote> | Download all changes3 from <remote> but don't integrate into HEAD |
| git pull <remote> <branch> | Download changes and merge4 <remote> into HEAD |
| git push <remote> <branch> | Push local changes to <remote> |
| git push -u <remote> <branch> | Push local changes to <remote> and track it |
| git push <remote> --tags | Push all local tags to |
| git push <remote> --delete <branch> | Delete <branch> from <remote>5 |
| git push <remote> --delete <tag_name> | Delete tag <tag_name> from <remote> |
| git branch -dr <remote/branch> | Delete a local remote tracking branch <remote/branch> |
| git push --tags | Publish your tags |
| MERGE AND REBASE | |
| git merge <branch> | Merge branch into your current HEAD |
| git merge --abort | Abort merging |
| git rebase <branch> | Rebase your current HEAD onto <branch> |
| git rebase --abort | Abort a rebase |
| git rebase --continue | Continue a rebase after resolving conflicts |
| git mergetool | Use your confgured merge tool to resolve conflicts |
| UNDO | |
| git reset --hard HEAD | Discard all local changes in your working directory |
| git checkout HEAD <file> | Discard changes in a specific <file> |
| git revert <commit> | Revert a commit by producing a new commit with contrary changes |
| git reset <commit> | Reset HEAD pointer to <commit> and preserve changes as unstaged changes |
| git reset --hard <commit> | Reset HEAD pointer to <commit> and discard all following changes |
| git reset --keep <commit> | Reset HEAD pointer to <commit> and preserve uncommitted local changes |