Git tips & tricks for everyday use
I’ve been working with git for the last few years and I have some tricks to make my every day use a bit easier. So I wanted to share them and hopefully help someone with it.
This article is aimed at somebody who has already some experience using git.
Get a file from another branch without changing your current branch
When you are working on a feature branch but you need a file from another branch, you could stash your changes, switch to the other branch and copy the file. But you can do this with a single action.
git checkout <other-branch> -- path/to/file
Partial adds
You did a lot of changes but you want to commit them in separate commits. Look no further!
git add -p
Highligh word changes with git diff
Full diffs can give not enough information. Sometimes all text was on a single line so you won’t see the exact difference. So
you can use the option --word-diff
git diff --word-diff
Better logging
A cleaner git log output with colors and a tree visualization.
git log --pretty=format:"%h %ad | %s%d [%an]" --graph --date=short
Output:
* b034f07 2016-11-22 | Merge feature-2 into master
|\
| |\
| | * 914ab62 2016-11-22 | More changes
* | | 43941b5 2016-11-22 | New feature 2
|/ /
* | 7d191da 2016-11-22 | Starting on feature xxx
|/
* 127c16f 2016-11-22 | bugfix xxx
or without the custom format
git log --oneline --decorate --graph
Using git bisect to track down bugs
Sometimes it is hard find the commit which caused a certain issue. You could manually checkout out specific commits and hope you choose somewhat right
or you use the bisect
tool.
git bisect start
git bisect good
git bisect bad HEAD
Bisect will checkout a commit in the middle between good-commit-hash
and HEAD
. Then you will have to review this commit and mark it as
good or bad.
git bisect good/bad
This will continue until you’ve found the commit which caused the issue. Run the following commands to return to the original state and get a summary from git bisect
.
git bisect reset
git bisect log
Git aliases
Git supports aliases for git commands, this way you tweak existing command to perform better or abbreviate commands. You can add aliases by editing your .gitconfig
file or by running the git config
command.
These are a few examples, check out my gitconfig for more aliases and custom configs.
git config --global alias.stat = status
git config --global alias.remotes = remote -v
Command autocompletion
The git repository already ships with some autocompletion helpers, you will only have to download and activate them. See the autocompletion directory for the different available formats.
Execute the following commands to enable autocompletion on your git commands:
cd ~
curl -O https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash
mv git-completion.bash .git-completion.bash
Finally place this line in your .bashrc
file and you are good to go!
source ~/.git-completion.bash
Ignore whitespace changes
When checking a diff or checking code with git blame
it’s possible you want to ignore whitespace changes. Just use the -w
option
git diff -w
git blame -w
Bonus: use legit
Legit is a complementary command-line interface for Git, optimized for workflow simplicity. It is heavily inspired by GitHub for Mac. It will add some extra functionality to your git installation.
git sync
# Syncronizes current branch. Auto-merge/rebase, un/stash.
git switch <branch>
# Switches to branch. Stashes and restores unstaged changes.
git publish <branch>
# Publishes branch to remote server.
git unpublish <branch>
# Removes branch from remote server.
git branches
# Nice & pretty list of branches + publication status.
See git-legit.org for more information.
These are my git tips and tricks and I hope this was useful for you. What are your git tricks? Please share them in the comments below!