Top Ten Git Tips & Tricks
Tags: git
Published: 2021-06-08 22:21:21

*This article was originally written by [Julie Kent][1] on the [Honeybadger Developer Blog][2].*  

This article complements [‘Understanding How Git Works’][4]. Now that you have an understanding of the plumbing, it's time to level up your skills. Hopefully, these tips and tricks will increase your efficiency and productivity as a developer. It will help you spend more time coding and less time trying to decide whether to `git merge` or `git rebase`. Without further ado, let's get into it!

## 10. Blank commits

Have you ever found yourself making a small tweak to the README so that you can kick-off a build (or some other integration) and try to debug an issue? I used to do this fairly frequently, until I found out about the following command:

`git commit --allow empty -m 'it works!'`

This allows you to trigger a commit and kick off a workflow without having to make a trivial change to a README or some other file.

## 9. Make your log pretty!

This one is more fun, and sometimes, adding a bit of color does help our eyes and brain read what's on the screen better.

`git log --pretty=oneline --graph --decorate --all`

Here's an example of what you can expect:

![example](https://www.honeybadger.io/images/blog/posts/git-tricks/gitlog.png)

## 8. Clean up your local branches

If you're like me, you enjoy keeping things tidy, and this includes your computer. :) I fell in love with the `git config` setting, which deletes local branches that have been removed from the remote when doing a `fetch` or `pull`.

`git config --global fetch.prune true`

Similarly, you can delete local branches that have been merged into the master by running this code:

`git branch --merged master | grep -v "master" | xargs -n 1 git branch -d`

## 7. Rebase oopsie

Using `git rebase` is an extremely valuable command, but sometimes, you accidentally rebase away a commit and start sweating. Or, maybe that's just me. :) `git reflog` to the rescue! As long as you've committed your work, it still lives in your local working copy. Using `git reflog`, you can find the SHA1 that you need something from. Then, run `git checkout <SHA1>`, copy what you need, and run `git checkout HEAD` to return to the most recent commit in the branch. Crisis averted!

## 6. No more blaming!

There's a bug, and you can't figure it out. Sometimes, you want/need to reach out to the person who wrote the code that does not appear to be working. You run `git blame`, which will show each line's last commit change and who changed it. Cooooool, but ugh, running `git blame` just doesn't feel very nice. Good news! You can change the alias using this command:

`git config --global alias.investigate blame` (You can change `investigate` to whatever word you'd like)

## 5. Advanced `git add`

Sometimes, I get carried away to the point that I realize I have way more changes in a file than make sense to commit together. I recently learned that you can use `git add -p` to selectively organize your commits. Here is an example:

![exampleadd](https://www.honeybadger.io/images/blog/posts/git-tricks/gitadd.png)

## 4. Speaking of that `p` flag

It can also be used with `git stash` when you don't want to stash _all files_ or the entirety of one file with changes. When running `git stash -p`, you will see a similar interactive screen as `git add -p`

## 3. Automate `git bisect`

This is more of an advanced tip. If you haven't heard of `git bisect` yet, I recommend reading [this blog post](https://www.metaltoad.com/blog/beginners-guide-git-bisect-process-elimination). After reading the blog post, you’ll know that using `git bisect` can require a lot of commands, which can limit its usefulness. Because of this complexity, you might be compelled to write a script that can automate some of this process. You can then use this nifty command to run your script.

`git bisect run my_script arguments`

You can include a number of arguments. Read more about `git bisect` and how to use the `run` command [here](https://git-scm.com/docs/git-bisect#_bisect_run).

## 2. Have some fun

Make use of emojis by bookmarking [this cheatsheet](https://gist.github.com/rxaviers/7360908).

## 1. Need help?

I'm always amazed by how quickly I forget about the built-in help tools within a number of applications and CLI's. I'll be trying an endless number of Stack Overflow answers to solve my problem, and finally, I'll remember

`git help`

You essentially have all of the Git documentation at your fingertips! If you're completely new to Git or just want a nice refresher, you can even run

`git help tutorial`

which will run you through the basics.

Finally, if you want to get documentation for a specific command, you can run, for example, `man git-log` if you want to know more about the `git log` command.

## Wrapping Up

Well, there you have it! I hope that you've at least come across something new that you didn't know before or refreshed your memory about a command you might have forgotten about. Git is an amazingly powerful tool, and we should make the most of it!

## About Honeybadger
Honeybadger has your back when it counts. We're the only error tracker that combines exception monitoring, uptime monitoring, and cron monitoring into a single, simple to use platform.  

Our mission: to tame production and make you a better, more productive developer. [Learn more][3]

[1]: https://www.honeybadger.io/blog/git-tricks/#authorDetails
[2]: https://www.honeybadger.io/blog/git-tricks/
[3]: https://www.honeybadger.io/
[4]: https://www.honeybadger.io/blog/how-does-git-work/