Track Tips Updates Daily
Most commonly used git tips and tricks.
🏠 Home · 🔍 Search · 🔥 Feed · 📮 Subscribe · ❤️ Sponsor · 😺 git-tips/tips · ⭐ 21K · 🏷️ Development Environment
May 03, 2023
Undo local changes with the content in index(staging)
git checkout -- <file_name>
May 04, 2021
Create local tag
git tag <tag-name>
Show the contents of any stash in patch form
git stash show -p <stash@{n}>
Push the current branch to the same name on the remote repository
git push origin HEAD
Mar 18, 2021
Delete local branches that has been squash and merged in the remote.
git branch -vv | grep ': gone]' | awk '{print <!-- @doxie.inject start -->}' | xargs git branch -D
Jul 16, 2020
Create and switch new branch
git checkout -b <branch-name>
Alternatives:
git branch <branch-name> && git checkout <branch-name>
git switch -c <branch-name>
Apr 18, 2019
Show changes over time for specific file
git log -p <file_name>
Reset: preserve uncommitted local changes
git reset --keep <commit>
Delete remote branch
git push origin --delete <remote_branchname>
Alternatives:
git push origin :<remote_branchname>
git branch -dr <remote/branch>
List all currently configured remotes
git remote -v
Update a submodule to the latest commit
cd <path-to-submodule>
git pull origin <branch>
cd <root-of-your-main-project>
git add <path-to-submodule>
git commit -m "submodule updated"
Oct 05, 2018
Visualize the tree including commits that are only referenced from reflogs
git log --graph --decorate --oneline $(git rev-list --walk-reflogs --all)
Jul 25, 2018
Use SSH instead of HTTPs for remotes
git config --global url.'[email protected]:'.insteadOf 'https://github.com/'
Mar 21, 2018
Change a branch base
git rebase --onto <new_base> <old_base>
Mar 08, 2018
Visualize the version tree.
git log --pretty=oneline --graph --decorate --all
Alternatives:
gitk --all
git log --graph --pretty=format:'%C(auto) %h | %s | %an | %ar%d'
Oct 30, 2017
Remove sensitive data from history, after a push
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch <path-to-your-file>' --prune-empty --tag-name-filter cat -- --all && git push origin --force --all
Aug 08, 2017
Push a new local branch to remote repository and track
git push -u origin <branch_name>
Apr 06, 2017
Checkout a commit prior to a day ago
git checkout master@{yesterday}
Mar 23, 2017
Search change by content
git log -S'<a term in the source>'
Feb 24, 2017
Saving current state of unstaged changes to tracked files
git stash -k
Alternatives:
git stash --keep-index
git stash push --keep-index
Saving current state of all files (ignored, untracked, and tracked)
git stash -a
Alternatives:
git stash --all
git stash push --all
Feb 23, 2017
Show git status short
git status --short --branch
Feb 22, 2017
List all git aliases
git config -l | grep alias | sed 's/^alias\.//g'
Alternatives:
git config -l | grep alias | cut -d '.' -f 2
Feb 21, 2017
Saving current state with message
git stash push -m <message>
Alternatives:
git stash push --message <message>
List n last commits
git log -<n>
Alternatives:
git log -n <n>
Feb 16, 2017
Quickly switch to the previous branch
git checkout -
Alternatives:
git checkout @{-1}
Jan 30, 2017
Backup untracked files.
git ls-files --others -i --exclude-standard | xargs zip untracked.zip
Jan 27, 2017
Generates a summary of pending changes
git request-pull v1.0 https://git.ko.xz/project master:for-linus
List references in a remote repository
git ls-remote git://git.kernel.org/pub/scm/git/git.git
Jan 16, 2017
logs between date range
git log --since='FEB 1 2017' --until='FEB 14 2017'
Exclude author from logs
git log --perl-regexp --author='^((?!excluded-author-regex).*)
Jan 08, 2017
Get the repo name.
git rev-parse --show-toplevel
Dec 25, 2016
Preformatted patch file.
git format-patch -M upstream..topic
Dec 12, 2016
Show a Git logical variable.
git var -l | <variable>
Oct 31, 2016
Edit [local/global] git config
git config [--global] --edit
blame on certain range
git blame -L <start>,<end>
Oct 24, 2016
Add everything, but whitespace changes
git diff --ignore-all-space | git apply --cached
Oct 11, 2016
List unpushed git commits
git log --branches --not --remotes
Alternatives:
git log @{u}..
git cherry -v
Oct 05, 2016
Always rebase instead of merge on pull.
git config --global pull.rebase true
Alternatives:
#git < 1.7.9
git config --global branch.autosetuprebase always
Oct 03, 2016
Specific fetch reference
git fetch origin master:refs/remotes/origin/mymaster
Sep 28, 2016
Apply commit from another repository
git --git-dir=<source-dir>/.git format-patch -k -1 --stdout <SHA1> | git am -3 -k
Find common ancestor of two branches
git merge-base <branch-name> <other-branch-name>
Sep 24, 2016
Add object notes
git notes add -m 'Note on the previous commit....'
Show all the git-notes
git log --show-notes='*'
Aug 26, 2016
Alias: git undo
git config --global alias.undo '!f() { git reset --hard $(git rev-parse --abbrev-ref HEAD)@{${1-1}}; }; f'
Aug 15, 2016
Revert: Reverting an entire merge
git revert -m 1 <commit-ish>
Aug 14, 2016
Number of commits in a branch
git rev-list --count <branch-name>
Aug 12, 2016
Show how many lines does an author contribute
git log --author='_Your_Name_Here_' --pretty=tformat: --numstat | gawk '{ add += <!-- @doxie.inject start -->; subs += <!-- @doxie.inject end -->; loc += <!-- @doxie.inject start --> - <!-- @doxie.inject end --> } END { printf "added lines: %s removed lines: %s total lines: %s
", add, subs, loc }' -
Alternatives:
git log --author='_Your_Name_Here_' --pretty=tformat: --numstat | awk '{ add += <!-- @doxie.inject start -->; subs += <!-- @doxie.inject end -->; loc += <!-- @doxie.inject start --> - <!-- @doxie.inject end --> } END { printf "added lines: %s, removed lines: %s, total lines: %s
", add, subs, loc }' - # on Mac OSX
Aug 10, 2016
Forced push but still ensure you don't overwrite other's work
git push --force-with-lease <remote-name> <branch-name>
Jul 16, 2016
Group commits by authors and title
git shortlog
Jul 07, 2016
Show changes using common diff tools.
git difftool [-t <tool>] <commit1> <commit2> <path>
Jul 03, 2016
Show the author, time and last revision made to each line of a given file
git blame <file-name>
Jun 30, 2016
Retrieve the commit hash of the initial revision.
git rev-list --reverse HEAD | head -1
Alternatives:
git rev-list --max-parents=0 HEAD
git log --pretty=oneline | tail -1 | cut -c 1-40
git log --pretty=oneline --reverse | head -1 | cut -c 1-40
Jun 25, 2016
Force push to Remote Repository
git push -f <remote-name> <branch-name>
Adding Remote name
git remote add <remote-nickname> <remote-url>
Jun 23, 2016
Unstaging Staged file
git reset HEAD <file-name>
Jun 22, 2016
Interactive staging.
git add -i
Jun 19, 2016
Update all the submodules
git submodule foreach git pull
Alternatives:
git submodule update --init --recursive
git submodule update --remote
Get first commit in a branch (from master)
git log --oneline master..<branch-name> | tail -1
Alternatives:
git log --reverse master..<branch-name> | head -6
Jun 18, 2016
Search Commit log across all branches for given text
git log --all --grep='<given-text>'
Jun 17, 2016
Delete local tag
git tag -d <tag-name>
Delete remote tag
git push origin :refs/tags/<tag-name>
Clone a shallow copy of a repository
git clone https://github.com/user/repo.git --depth 1
Jun 16, 2016
Add custom editors.
git config --global core.editor '$EDITOR'
Show all local branches ordered by recent commits
git for-each-ref --sort=-committerdate --format='%(refname:short)' refs/heads/
Find lines matching the pattern (regex or string) in tracked files
git grep --heading --line-number 'foo bar'
Jun 13, 2016
Changes staged for commit
git diff --cached
Alternatives:
git diff --staged
Remove branches that have already been merged with master
git branch --merged master | grep -v '^\*' | xargs -n 1 git branch -d
Alternatives:
git branch --merged master | grep -v '^\*\| master' | xargs -n 1 git branch -d # will not delete master if master is not checked out
See commit history for just the current branch
git cherry -v master
Turn off git colored terminal output
git config --global color.ui false
Specific color settings
git config --global <specific command e.g branch, diff> <true, false or always>
Jun 11, 2016
Ignore file mode changes on commits
git config core.fileMode false
Jun 10, 2016
Clone a single branch
git clone -b <branch-name> --single-branch https://github.com/user/repo.git
Jun 08, 2016
Bypass pre-commit and commit-msg githooks
git commit --no-verify
List commits and changes to a specific file (even through renaming)
git log --follow -p -- <file_path>
Jun 07, 2016
List all branch is WIP
git checkout master && git branch --no-merged
Find guilty with binary search
git bisect start # Search start
git bisect bad # Set point to bad commit
git bisect good v2.6.13-rc2 # Set point to good commit|tag
git bisect bad # Say current state is bad
git bisect good # Say current state is good
git bisect reset # Finish search
May 18, 2016
Change previous two commits with an interactive rebase.
git rebase --interactive HEAD~2
May 11, 2016
List only the root and merge commits.
git log --first-parent
Apr 29, 2016
Extract file from another branch.
git show <branch_name>:<file_name>
Apr 10, 2016
Checkout a new branch without any history
git checkout --orphan <branch_name>
Apr 06, 2016
View the GPG signatures in the commit log
git log --show-signature
Remove entry in the global config.
git config --global --unset <entry-name>
Apr 02, 2016
Instantly browse your working repository in gitweb.
git instaweb [--local] [--httpd=<httpd>] [--port=<port>] [--browser=<browser>]
Mar 29, 2016
Count unpacked number of objects and their disk consumption.
git count-objects --human-readable
Prune all unreachable objects from the object database.
git gc --prune=now --aggressive
Mar 11, 2016
Open all conflicted files in an editor.
git diff --name-only | uniq | xargs $EDITOR
Mar 09, 2016
Reuse recorded resolution, record and reuse previous conflicts resolutions.
git config --global rerere.enabled 1
Mar 06, 2016
Commits in Branch1 that are not in Branch2
git log Branch1 ^Branch2
Mar 02, 2016
List ignored files.
git check-ignore *
Status of ignored files.
git status --ignored
Feb 26, 2016
Skip staging area during commit.
git commit --only <file_path>
Feb 22, 2016
Marks your commit as a fix of a previous commit.
git commit --fixup <SHA-1>
Squash fixup commits normal commits.
git rebase -i --autosquash
Feb 12, 2016
Grab a single file from a stash
git checkout <stash@{n}> -- <file_path>
Alternatives:
git checkout stash@{0} -- <file_path>
Untrack files without deleting
git rm --cached <file_path>
Alternatives:
git rm --cached -r <directory_path>
Restore file to a specific commit-hash
git checkout <commit-ish> -- <file_path>
Feb 10, 2016
Dry run. (any command that supports dry-run flag should do.)
git clean -fd --dry-run
Feb 02, 2016
Check if the change was a part of a release.
git name-rev --name-only <SHA-1>
Jan 31, 2016
Make git case sensitive.
git config --global core.ignorecase false
Auto correct typos.
git config --global help.autocorrect 1
Jan 29, 2016
List all the alias and configs.
git config --list
Jan 17, 2016
Amend author.
git commit --amend --author='Author Name <[email protected]>'
Reset author, after author has been changed in the global config.
git commit --amend --reset-author --no-edit
Dec 27, 2015
Restore deleted file.
git checkout <deleting_commit> -- <file_path>
Dec 25, 2015
Clean the files from .gitignore
.
git clean -X -f
Dec 19, 2015
Don’t consider changes for tracked file.
git update-index --assume-unchanged <file_name>
Undo assume-unchanged.
git update-index --no-assume-unchanged <file_name>
Dec 18, 2015
Show inline word diff.
git diff --word-diff
Nov 18, 2015
Show helpful guides that come with Git
git help -g
Nov 03, 2015
Show the most recent tag on the current branch.
git describe --tags --abbrev=0
Oct 28, 2015
Everyday Git in twenty commands or so
git help everyday
Stash changes before rebasing
git rebase --autostash
Fetch pull request by ID to a local branch
git fetch origin pull/<id>/head:<branch-name>
Alternatives:
git pull origin pull/<id>/head:<branch-name>
Sep 29, 2015
Ignore one file on commit (e.g. Changelog).
git update-index --assume-unchanged Changelog; git commit -a; git update-index --no-assume-unchanged Changelog
Sep 19, 2015
Get the name of current branch.
git rev-parse --abbrev-ref HEAD
Sep 13, 2015
Export a branch with history to a file.
git bundle create <file> <branch-name>
Import from a bundle
git clone repo.bundle <repo-dir> -b <branch-name>
Sep 02, 2015
Deploying git tracked subfolder to gh-pages
git subtree push --prefix subfolder_name origin gh-pages
Adding a project to repo using subtree
git subtree add --prefix=<directory_name>/<project_name> --squash [email protected]:<username>/<project_name>.git master
Get latest changes in your repo for a linked project using subtree
git subtree pull --prefix=<directory_name>/<project_name> --squash [email protected]:<username>/<project_name>.git master
Aug 25, 2015
Prunes references to remove branches that have been deleted in the remote.
git fetch -p
Alternatives:
git remote prune origin
Aug 22, 2015
Archive the master
branch
git archive master --format=zip --output=master.zip
Modify previous commit without modifying the commit message
git add --all && git commit --amend --no-edit
Aug 21, 2015
Rebases 'feature' to 'master' and merges it in to master
git rebase master feature && git checkout master && git merge -
Aug 19, 2015
Rename a branch
git branch -m <new-branch-name>
Alternatives:
git branch -m [<old-branch-name>] <new-branch-name>
Aug 16, 2015
Show all commits in the current branch yet to be merged to master
git cherry -v master
Alternatives:
git cherry -v master <branch-to-be-merged>
Aug 11, 2015
Before deleting untracked files/directory, do a dry run to get the list of these files/directories
git clean -n
Forcefully remove untracked files
git clean -f
Forcefully remove untracked directory
git clean -f -d
Aug 07, 2015
Saving current state of tracked files without commiting
git stash
Alternatives:
git stash push
Saving current state including untracked files
git stash -u
Alternatives:
git stash push -u
git stash push --include-untracked
Jul 31, 2015
Revert: Undo a commit by creating a new commit
git revert <commit-ish>
Reset: Discard commits, advised for private branch
git reset <commit-ish>
Jul 30, 2015
Create new working tree from a repository (git 2.5)
git worktree add -b <branch-name> <path> <start-point>
Create new working tree from HEAD state
git worktree add --detach <path> HEAD
Jul 29, 2015
Reword the previous commit message
git commit -v --amend
See all commits made since forking from master
git log --no-merges --stat --reverse master..
Show all ignored files
git ls-files --others -i --exclude-standard
Jul 28, 2015
List of all files changed in a commit
git diff-tree --no-commit-id --name-only -r <commit-ish>
Unstaged changes since last commit
git diff
Show both staged and unstaged changes
git diff HEAD
Show all tracked files
git ls-files -t
Show all untracked files
git ls-files --others
Jul 27, 2015
Git Aliases
git config --global alias.<handle> <command>
git config --global alias.st status
Show list of all saved stashes
git stash list
Apply any stash without deleting from the stashed list
git stash apply <stash@{n}>
Apply last stashed state and delete it from stashed list
git stash pop
Alternatives:
git stash apply stash@{0} && git stash drop stash@{0}
Delete all stored stashes
git stash clear
Alternatives:
git stash drop <stash@{n}>
Jul 25, 2015
Pick commits across branches using cherry-pick
git checkout <branch-name> && git cherry-pick <commit-ish>
Find out branches containing commit-hash
git branch -a --contains <commit-ish>
Alternatives:
git branch --contains <commit-ish>
Jul 22, 2015
What changed since two weeks?
git log --no-merges --raw --since='2 weeks ago'
Alternatives:
git whatchanged --since='2 weeks ago'
Jul 17, 2015
Get list of all remote references
git remote
Alternatives:
git remote show
Get list of all local and remote branches
git branch -a
Get only remote branches
git branch -r
Get git bash completion
curl -L http://git.io/vfhol > ~/.git-completion.bash && echo '[ -f ~/.git-completion.bash ] && . ~/.git-completion.bash' >> ~/.bashrc
Jul 16, 2015
Stage parts of a changed file, instead of the entire file
git add -p
Jul 15, 2015
git-tips
Collection of
git-tips
, want to add your tips? Checkout contributing.md
English | 中文 (⭐15k) | Русский (⭐599) | 한국어 (⭐989) | Tiếng Việt (⭐22) | 日本語 (⭐226) | नेपाली (⭐0) | Polski (⭐5) | فارسی (⭐0)
Tools:
- git-tip - A handy CLI to make optimum use of these tips. (Here in Docker container (⭐11))
P.S: All these commands are tested on git version 2.7.4 (Apple Git-66)
.
Sync with remote, overwrite local changes
git fetch origin && git reset --hard origin/master && git clean -f -d
List of all files till a commit
git ls-tree --name-only -r <commit-ish>
Git reset first commit
git update-ref -d HEAD
List all the conflicted files
git diff --name-only --diff-filter=U
List all branches that are already merged into master
git branch --merged master
List all branches and their upstreams, as well as last commit on branch
git branch -vv
Track upstream branch
git branch -u origin/mybranch
Delete local branch
git branch -d <local_branchname>
Changing a remote's URL
git remote set-url origin <URL>
Prevent auto replacing LF with CRLF
git config --global core.autocrlf false