A cheat sheet for uncommon Git commands
Command |
Description |
git config --global user.name "foo" |
Set user name |
git config --global user.email "foo@example.com" |
Set user email |
Command |
Description |
git branch foo |
Create a new branch |
git branch -d foo |
Deletes a branch |
git switch foo |
Switch to a branch |
git switch -c|--create foo |
Create and switch to a branch |
git restore foo.js |
Undo all changes on the foo.js file |
git checkout foo.js |
Undo all changes on the foo.js file |
git checkout foo |
Use git switch instead |
git checkout -b foo |
Use git switch -c instead |
git merge foo |
Merge branch into current branch |
Command |
Description |
git pull --rebase --prune |
Get latest, rebase any changes not checked in and delete branches that no longer exist |
Command |
Description |
git add file.txt |
Stage file |
git add -p |
--patch file.txt` |
git mv file1.txt file2.txt |
Move/rename file |
git rm --cached file.txt |
Unstage file |
git rm --force file.txt |
Unstage and delete file |
git reset HEAD |
Unstage changes |
git reset --hard HEAD |
Unstage and delete changes |
git clean -f|--force -d |
Recursively remove untracked files from the working tree |
git clean -f|--force -d -x |
Recursively remove untracked and ignored files from the working tree |
Command |
Description |
git reset 5720fdf |
Reset current branch but not working area to commit |
git reset HEAD~1 |
Reset the current branch but not working area to the previous commit |
git reset --hard 5720fdf |
Reset current branch and working area to commit |
git commit --amend -m "New message" |
Change the last commit message |
git commit --fixup 5720fdf -m "New message" |
Merge into the specified commit |
git revert 5720fdf |
Revert a commit |
git rebase --interactive [origin/main] |
Rebase a PR (git pull first) |
git rebase --interactive 5720fdf |
Rebase to a particular commit |
git rebase --interactive --root 5720fdf |
Rebase to the root commit |
git rebase --continue |
Continue an interactive rebase |
git rebase --abort |
Cancel an interactive rebase |
git cherry-pick 5720fdf |
Copy the commit to the current branch |
Command |
Description |
git diff |
See difference between working area and current branch |
git diff HEAD HEAD~2 |
See difference between te current commit and two previous commits |
git diff main other |
See difference between two branches |
Command |
Description |
git log |
See commit list |
git log --patch |
See commit list and line changes |
git log --decorate --graph --oneline |
See commit visualization |
git log --grep foo |
See commits with foo in the message |
git show HEAD |
Show the current commit |
git show HEAD^ or git show HEAD~1 |
Show the previous commit |
git show HEAD^^ or git show HEAD~2 |
Show the commit going back two commits |
git show main |
Show the last commit in a branch |
git show 5720fdf |
Show named commit |
git blame file.txt |
See who changed each line and when |
Command |
Description |
git stash push -m "Message" |
Stash staged files |
git stash --include-untracked |
Stash working area and staged files |
git stash --staged |
Stash staged files |
git stash list |
List stashes |
git stash apply |
Moved last stash to working area |
git stash apply 0 |
Moved named stash to working area |
git stash clear |
Clear the stash |
Command |
Description |
git tag |
List all tags |
git tag -a|--annotate 0.0.1 -m|--message "Message" |
Create a tag |
git tag -d|--delete 0.0.1 |
Delete a tag |
git push --tags |
Push tags to remote repository |
Command |
Description |
git remote -v |
List remote repositories |
git remote show origin |
Show remote repository details |
git remote add upstream <url> |
Add remote upstream repository |
git fetch upstream |
Fetch all remote branches |
git rebase upstream/main |
Refresh main branch from upstream |
git remote -v |
List remote repositories |
git push --force |
Push any changes while overwriting any remote changes |
git push --force-with-lease |
Push any changes but stop if there are any remote changes |
git push --tags |
Push tags to remote repository |
Command |
Description |
git submodule status |
Check status of all submodules |
- Pull submodules
git submodule sync
git submodule init
git submodule update
- Change branch
cd /submodule
git fetch origin <branch-name>
git checkout <branch-name>
cd /