Personal Git Cheat Sheet

Git commands

For sure there are a lot of additional git commands, weird configurations or more robust cheat sheets everywhere but this one works for me. These are the commands I’ve required on a daily basis, organized, with natural descriptions and easy to understand for future reference.

Type Description Command
Basic Start a git repository $ git init
Basic Includes a file in stage $ git add <FILE>
Basic Inclides files in state to git base $ git commit -m <MESSAGE>
Basic Clone a repository $ git clone
Basic Check status of files $ git status [-S:Simplified]
Basic Check change differences not prepated $ git diff
Basic Check change differences in stage $ git diff --staged
Basic Delete all local changes and restart from remote $ git reset --hard origin/master
Type Description Command
Config Configure vscode as default editor $ git config --global core.editor "code --wait"
Config Configure emacs as default editor $ git config --global core.editor emacs
Config Enable git colors $ git config --global color.ui true
Config Configure commit user x user $ git config --global
Config Configure commit email x user $ git config --global
Config Open configurations in editor $ git config -e, $ git config --global -e
Config List all config properties $ git config -l, $ git config --local -l
Type Description Command
Branch Rename current branch $ git branch -m new-name
Branch Rename other branch $ git branch -m old-name new-name
Branch Push renamed branch $ git push origin :old-name new-name
Branch Delete local branch $ git branch -d [-D to force] <branch_name>
Branch Delete remote branch $ git push -d [-D to force] <remote_name> <branch_name>
Branch Display all branches $ git branch -a
Branch List all branches that have been merged into the current branch. $ git branch –merged
Branch List references that could be deleted from local $ git remote prune origin --dry-run
Branch Delete references not present on remote $ git remote prune origin
Remotes List all remotes configured $ git remote -v
Remotes Display url of remote origin $ git remote get-url origin
Remotes Add a remote reference to our repo $ git remote add <remote-reference-name> <remote-url>
Remotes Delete a remote reference from our repo $ git remote remove <remote-reference-name>
Remotes Rename a remote reference $ git remote rename <old-name> <new-name>
Type Description Command
Logs Display logs in single $ git log --oneline
Logs Display logs $ git log --graph --decorate --pretty=oneline --abbrev-commit --all
Type Description Command
Commit Basic interactive rebase $ git rebase -i 0ad14fa5
Commit To rebase including the first commit $ git rebase -i --root
Commit Change last commit author $ git commit --amend --author="Hernan <NEW EMAIL>" --no-edit
Commit To revert a rebase already pushed $ git reflog <branch> -> THEN -> $ git push -f
Commit To Solve problem when new repos have problems $ git pull origin branchname --allow-unrelated-histories
Type Description Command
Submodules Add a new submodule pointing to master $ git submodule add -b master <REMOTE_REPOSITORY> <FOLDER_IN_CURRENT_PROJECT>
  • To change the author history

    1. $ git rebase -i X
    2. $ git commit --amend --author="<NAME> <EMAIL>" --no-edit
    3. $ git rebase --continue
    4. $ git stash save YOUR_MESSAGE
  • Delete all local branches not present on remote
    $ git branch --merged | grep -v "master" | grep -v "develop" > /tmp/merged-branches && vi /tmp/merged-branches && xargs git branch -d < /tmp/merged-branches

  • Delete all local branches with remote branch GONE
    $ git fetch -p&& for branch in 'git for-each-ref --format '%(refname) %(upstream:track)' refs/heads | awk '$2 == "[gone]" {sub("refs/heads/", "", $1); print $1}'``; do git branch -D $branch; done

  • Remove submodules completely

    • $ git submodule deinit public
    • $ git rm -r public
    • $ git commit -m "Removed submodule public"
    • $ rm -rf .git/modules/public

Some Tips:

/posts/git-cheat-sheet/images/1.git-cheat-sheet.png Git cheat sheet