A Quick git/vim Workflow Tip
Git makes it incredibly easy to work on a lot of a project’s features at once, hopping quickly back and forth between branches. I love this ability, but I hate remembering what exactly it was that I was working on in a particular branch. I know it had something to do with a particular bug, but I’ve no idea anymore which files I was fiddling around with to fix it.
git vim. I’ve set up two trivial alias in my
~/.gitconfig file to
either show me a list of files effected by a particular revision or range, and
to directly open them in my editor of choice so that I’m back to work as
quickly as possible.
[alias] ... fshow = ! sh -c 'git show --pretty="format:" --name-only $1 | grep -v "^$" | uniq | sed -e "s#^#`git rev-parse --show-toplevel`/#"' - vim = ! sh -c 'vim `git fshow $1`' - mate = ! sh -c 'mate `git fshow $1`' - edit = ! sh -c '$EDITOR `git fshow $1`' -
The first alias calls
git show to get a list of all the files touched by a
revision or range, filters out empty lines, and ensures that the paths are
absolute after deduplicating the list of files. Any
valid revision or range will work:
To see a list of files changed over the last four revisions, I could type:
$ git fshow HEAD~5.. lib/rocco/layout.rb lib/rocco/layout.mustache lib/rocco.rb rocco.gemspec test/helper.rb test/test_reported_issues.rb
To open those files for editing, I’d use the second alias:
$ git vim HEAD~5..
If I wanted to open the files in TextMate instead, I’d use the third:
$ git mate HEAD~5..
Or, if I was clever enough to set up an
$EDITOR environment variable (which
I should do, given that it’s used all over the place on the shell), I could
use the last alias to open the files in whatever program that was set to:
$ git edit HEAD~5..
I can hop from branch to branch, and open all the relevant files quickly and easily. It’s a small thing, but it’s made a big difference in my workflow over the last week or three.— Mike West