-
Notifications
You must be signed in to change notification settings - Fork 9
Git tips
Collection of
git-tips, want to add your tips? Checkout contributing.md
English | 中文 | Русский | 한국어 | Tiếng Việt
git-tip - A handy CLI to make optimum use of these tips. (Here in a Docker container .)
All these commands were tested on
git version 2.7.4 (Apple Git-66).
- Everyday Git in twenty commands or so
- Show helpful guides that come with Git
- Search change by content
- Remove sensitive data from history, after a push
- Sync with remote, overwrite local changes
- List of all files till a commit
- Git reset first commit
- List all the conflicted files
- List of all files changed in a commit
- Unstaged changes since last commit
- Changes staged for commit
- Show both staged and unstaged changes
- List all branches that are already merged into master
- Quickly switch to the previous branch
- Remove branches that have already been merged with master
- List all branches and their upstreams, as well as last commit on branch
- Track upstream branch
- Delete local branch
- Delete remote branch
- Delete local tag
- Delete remote tag
- Undo local changes with the last content in head
- Revert: Undo a commit by creating a new commit
- Reset: Discard commits, advised for private branch
- Reword the previous commit message
- See commit history for just the current branch
- Amend author.
- Reset author, after author has been changed in the global config.
- Changing a remote's URL
- Get list of all remote references
- Get list of all local and remote branches
- Get only remote branches
- Stage parts of a changed file, instead of the entire file
- Get git bash completion
- What changed since two weeks?
- See all commits made since forking from master
- Pick commits across branches using cherry-pick
- Find out branches containing commit-hash
- Git Aliases
- Saving current state of tracked files without commiting
- Saving current state of unstaged changes to tracked files
- Saving current state including untracked files
- Saving current state with message
- Saving current state of all files (ignored, untracked, and tracked)
- Show list of all saved stashes
- Apply any stash without deleting from the stashed list
- Apply last stashed state and delete it from stashed list
- Delete all stored stashes
- Grab a single file from a stash
- Show all tracked files
- Show all untracked files
- Show all ignored files
- Create new working tree from a repository (git 2.5)
- Create new working tree from HEAD state
- Untrack files without deleting
- Before deleting untracked files/directory, do a dry run to get the list of these files/directories
- Forcefully remove untracked files
- Forcefully remove untracked directory
- Update all the submodules
- Show all commits in the current branch yet to be merged to master
- Rename a branch
- Rebases 'feature' to 'master' and merges it in to master
- Archive the
masterbranch - Modify previous commit without modifying the commit message
- Prunes references to remote branches that have been deleted in the remote.
- Retrieve the commit hash of the initial revision.
- Visualize the version tree.
- Deploying git tracked subfolder to gh-pages
- Adding a project to repo using subtree
- Get latest changes in your repo for a linked project using subtree
- Export a branch with history to a file.
- Import from a bundle
- Get the name of current branch.
- Ignore one file on commit (e.g. Changelog).
- Stash changes before rebasing
- Fetch pull request by ID to a local branch
- Show the most recent tag on the current branch.
- Show inline word diff.
- Show changes using common diff tools.
- Don’t consider changes for tracked file.
- Undo assume-unchanged.
- Clean the files from
.gitignore. - Restore deleted file.
- Restore file to a specific commit-hash
- Always rebase instead of merge on pull.
- List all the alias and configs.
- Make git case sensitive.
- Add custom editors.
- Auto correct typos.
- Check if the change was a part of a release.
- Dry run. (any command that supports dry-run flag should do.)
- Marks your commit as a fix of a previous commit.
- Squash fixup commits normal commits.
- Skip staging area during commit.
- Interactive staging.
- List ignored files.
- Status of ignored files.
- Commits in Branch1 that are not in Branch2
- List n last commits
- Reuse recorded resolution, record and reuse previous conflicts resolutions.
- Open all conflicted files in an editor.
- Count unpacked number of objects and their disk consumption.
- Prune all unreachable objects from the object database.
- Instantly browse your working repository in gitweb.
- View the GPG signatures in the commit log
- Remove entry in the global config.
- Checkout a new branch without any history
- Extract file from another branch.
- List only the root and merge commits.
- Change previous two commits with an interactive rebase.
- List all branch is WIP
- Find guilty with binary search
- Bypass pre-commit and commit-msg githooks
- List commits and changes to a specific file (even through renaming)
- Clone a single branch
- Create and switch new branch
- Ignore file mode changes on commits
- Turn off git colored terminal output
- Specific color settings
- Show all local branches ordered by recent commits
- Find lines matching the pattern (regex or string) in tracked files
- Clone a shallow copy of a repository
- Search Commit log across all branches for given text
- Get first commit in a branch (from master)
- Unstaging Staged file
- Force push to Remote Repository
- Adding Remote name
- Show the author, time and last revision made to each line of a given file
- Group commits by authors and title
- Forced push but still ensure you don't overwrite other's work
- Show how many lines does an author contribute
- Revert: Reverting an entire merge
- Number of commits in a branch
- Alias: git undo
- Add object notes
- Show all the git-notes
- Apply commit from another repository
- Specific fetch reference
- Find common ancestor of two branches
- List unpushed git commits
- Add everything, but whitespace changes
- Edit [local/global] git config
- blame on certain range
- Show a Git logical variable.
- Preformatted patch file.
- Get the repo name.
- logs between date range
- Exclude author from logs
- Generates a summary of pending changes
- List references in a remote repository
- Backup untracked files.
- List all git aliases
- Show git status short
- Checkout a commit prior to a day ago
- Push a new local branch to remote repository and track
- Change a branch base
git help everydaygit help -ggit log -S'<a term in the source>'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 --allgit fetch origin && git reset --hard origin/master && git clean -f -dgit ls-tree --name-only -r <commit-ish>git update-ref -d HEADgit diff --name-only --diff-filter=Ugit diff-tree --no-commit-id --name-only -r <commit-ish>git diffgit diff --cachedAlternatives:
git diff --stagedgit diff HEADgit branch --merged mastergit checkout -Alternatives:
git checkout @{-1}git branch --merged master | grep -v '^\*' | xargs -n 1 git branch -dAlternatives:
git branch --merged master | grep -v '^\*\| master' | xargs -n 1 git branch -d # will not delete master if master is not checked outgit branch -vvgit branch -u origin/mybranchgit branch -d <local_branchname>git push origin --delete <remote_branchname>Alternatives:
git push origin :<remote_branchname>git tag -d <tag-name>git push origin :refs/tags/<tag-name>git checkout -- <file_name>git revert <commit-ish>git reset <commit-ish>git commit -v --amendgit cherry -v mastergit commit --amend --author='Author Name <[email protected]>'git commit --amend --reset-author --no-editgit remote set-url origin <URL>git remoteAlternatives:
git remote showgit branch -agit branch -rgit add -pcurl http://git.io/vfhol > ~/.git-completion.bash && echo '[ -f ~/.git-completion.bash ] && . ~/.git-completion.bash' >> ~/.bashrcgit log --no-merges --raw --since='2 weeks ago'Alternatives:
git whatchanged --since='2 weeks ago'git log --no-merges --stat --reverse master..git checkout <branch-name> && git cherry-pick <commit-ish>git branch -a --contains <commit-ish>Alternatives:
git branch --contains <commit-ish>git config --global alias.<handle> <command>
git config --global alias.st statusgit stashAlternatives:
git stash savegit stash -kAlternatives:
git stash --keep-indexgit stash save --keep-indexgit stash -uAlternatives:
git stash save -ugit stash save --include-untrackedgit stash save <message>git stash -aAlternatives:
git stash --allgit stash save --allgit stash listgit stash apply <stash@{n}>git stash popAlternatives:
git stash apply stash@{0} && git stash drop stash@{0}git stash clearAlternatives:
git stash drop <stash@{n}>git checkout <stash@{n}> -- <file_path>Alternatives:
git checkout stash@{0} -- <file_path>git ls-files -tgit ls-files --othersgit ls-files --others -i --exclude-standardgit worktree add -b <branch-name> <path> <start-point>git worktree add --detach <path> HEADgit rm --cached <file_path>Alternatives:
git rm --cached -r <directory_path>git clean -ngit clean -fgit clean -f -dgit submodule foreach git pullAlternatives:
git submodule update --init --recursivegit submodule update --remotegit cherry -v masterAlternatives:
git cherry -v master <branch-to-be-merged>git branch -m <new-branch-name>Alternatives:
git branch -m [<old-branch-name>] <new-branch-name>git rebase master feature && git checkout master && git merge -git archive master --format=zip --output=master.zipgit add --all && git commit --amend --no-editgit fetch -pAlternatives:
git remote prune origin git rev-list --reverse HEAD | head -1Alternatives:
git rev-list --max-parents=0 HEADgit log --pretty=oneline | tail -1 | cut -c 1-40git log --pretty=oneline --reverse | head -1 | cut -c 1-40git log --pretty=oneline --graph --decorate --allAlternatives:
gitk --allgit log --graph --pretty=format:'%C(auto) %h | %s | %an | %ar%d'git subtree push --prefix subfolder_name origin gh-pagesgit subtree add --prefix=<directory_name>/<project_name> --squash [email protected]:<username>/<project_name>.git mastergit subtree pull --prefix=<directory_name>/<project_name> --squash [email protected]:<username>/<project_name>.git mastergit bundle create <file> <branch-name>git clone repo.bundle <repo-dir> -b <branch-name>git rev-parse --abbrev-ref HEADgit update-index --assume-unchanged Changelog; git commit -a; git update-index --no-assume-unchanged Changeloggit rebase --autostashgit fetch origin pull/<id>/head:<branch-name>Alternatives:
git pull origin pull/<id>/head:<branch-name>git describe --tags --abbrev=0git diff --word-diffgit difftool [-t <tool>] <commit1> <commit2> <path>git update-index --assume-unchanged <file_name>git update-index --no-assume-unchanged <file_name>git clean -X -fgit checkout <deleting_commit>^ -- <file_path>git checkout <commit-ish> -- <file_path>git config --global pull.rebase trueAlternatives:
#git < 1.7.9
git config --global branch.autosetuprebase alwaysgit config --listgit config --global core.ignorecase falsegit config --global core.editor '$EDITOR'git config --global help.autocorrect 1git name-rev --name-only <SHA-1>git clean -fd --dry-rungit commit --fixup <SHA-1>git rebase -i --autosquashgit commit --only <file_path>git add -igit check-ignore *git status --ignoredgit log Branch1 ^Branch2git log -<n>Alternatives:
git log -n <n>git config --global rerere.enabled 1git diff --name-only | uniq | xargs $EDITORgit count-objects --human-readablegit gc --prune=now --aggressivegit instaweb [--local] [--httpd=<httpd>] [--port=<port>] [--browser=<browser>]git log --show-signaturegit config --global --unset <entry-name>git checkout --orphan <branch_name>git show <branch_name>:<file_name>git log --first-parentgit rebase --interactive HEAD~2git checkout master && git branch --no-mergedgit 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
git commit --no-verifygit log --follow -p -- <file_path>git clone -b <branch-name> --single-branch https://github.com/user/repo.gitgit checkout -b <branch-name>Alternatives:
git branch <branch-name> && git checkout <branch-name>git config core.fileMode falsegit config --global color.ui falsegit config --global <specific command e.g branch, diff> <true, false or always>git for-each-ref --sort=-committerdate --format='%(refname:short)' refs/heads/git grep --heading --line-number 'foo bar'git clone https://github.com/user/repo.git --depth 1git log --all --grep='<given-text>'git log master..<branch-name> --oneline | tail -1git reset HEAD <file-name>git push -f <remote-name> <branch-name>git remote add <remote-nickname> <remote-url>git blame <file-name>git shortloggit push --force-with-lease <remote-name> <branch-name>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 OSXgit revert -m 1 <commit-ish>git rev-list --count <branch-name>git config --global alias.undo '!f() { git reset --hard $(git rev-parse --abbrev-ref HEAD)@{${1-1}}; }; f'git notes add -m 'Note on the previous commit....'git log --show-notes='*'git --git-dir=<source-dir>/.git format-patch -k -1 --stdout <SHA1> | git am -3 -kgit fetch origin master:refs/remotes/origin/mymasterdiff -u <(git rev-list --first-parent BranchA) <(git rev-list --first-parent BranchB) | sed -ne 's/^ //p' | head -1git log --branches --not --remotesAlternatives:
git log @{u}..git cherry -vgit diff --ignore-all-space | git apply --cachedgit config [--global] --editgit blame -L <start>,<end>git var -l | <variable>git format-patch -M upstream..topicgit rev-parse --show-toplevelgit log --since='FEB 1 2017' --until='FEB 14 2017'git log --perl-regexp --author='^((?!excluded-author-regex).*)
git request-pull v1.0 https://git.ko.xz/project master:for-linusgit ls-remote git://git.kernel.org/pub/scm/git/git.gitgit ls-files --others -i --exclude-standard | xargs zip untracked.zipgit config -l | grep alias | sed 's/^alias\.//g'Alternatives:
git config -l | grep alias | cut -d '.' -f 2git status --short --branchgit checkout master@{yesterday}git push -u origin <branch_name>git rebase --onto <new_base> <old_base>
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
CLI snippets for
git.
This checklist—adapted from
bahmutov/npm-module-checklist—provides useful tips to ensure your module is ready for production deployment and publication.
Openly declare the health of your product, project, community, and source code with these essential badges. (GitHub SaaS only.)
Icons, images, gists, code snippets, etc.
- Architecture Decision Record status labels
- Octicon cheatsheet
- Project status badges
- TechRadar labels
Stellar languages, frameworks, platform, techniques, and tools.
