git is pretty much the defacto source tool used across the industry. Most engineers either use the
git CLI or GUI based tools like git-kraken or sourcetree. Most editors like VSCode have
git functionality out of the box.
For folks like me who prefer using the CLI for git, most know the common git commands like
git status etc...
Over the years have come across a few
git commands that not widely known but have proven to be useful.
Most folks used
git log to see the recent commit history. But by default, it's not in the most useful format to consume.
However, tweaking the
.gitconfig* file to set up an alias and pretty format it.
# setup alias in the .gitconfig file lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --branches
Formatted text after the alias is setup
When working on a feature branch, generally one will
master branch. This rewrites the commit history of the feature branch. If the feature branch is already pushed to a
remote, we have to use the
git push --force to push changes to a remote.
However in this case, if someone else from the team has also pushed any change to the branch it will be lost. Instead of using
--force rather use
--force-with-lease. This will check with someone else pushed commits to the same branch and prevent overwriting of commits.
When working on a feature branch there would be multiple commits before its ready for a PR. However, for the sake of keeping things clean, you do not want these multiple commits to be in the PR.
Best way to do this is
squash the commits into a single one. Use the command
git rebase -i <sha-id of master>
This will open an interactive editor where one can pick which commits to keep and which to squash. Also, the messages for commits can be edited.
When you need to move to a different while work on the current branch is not complete,
git stash is a good command to use.
Another time this feature is also very useful when let's say the
master branch has some updates you need on the feature branch. In this case, using
git pull master --rebase --autostash is to be used. This command automatically stashed the code, pulls down latest from master,
rebase aganist it and
pop's the stash out.
With time you could end up multiple feature branches on the repo. Most of the braches are merged with
master. This can cause the local
.git file to become large causing some slow up.
To prevent aganist this and do some home cleaning use
git branch | grep -v "master" | xargs git branch -D. This command cleans all branches expect the
Github has also released a feature where you can squash the commits while merging a PR. But if using something like Bitbucket or another tool they might not this feature.
.gitconfig is located in the root directory(
~/.gitconfig) for Mac.
Another set of useful utilities to checkout are git-extras. It has utilites for a bunch of git workflows.