On , I learnt ...

How to edit and search the files in one commit

When interactive rebasing, it’s useful to be able to edit all the files in one particular commit. Here’s how you can do that.

Select a commit to edit

First, mark the commit you want to edit with an e in the git-rebase-todo buffer that Git presents when you start an interactive rebase:

e 68704c08a008 Make the change easy
pick a6d294d39d5e Make the easy change

Opening the commit’s files in Vim

Open the files changed in the HEAD commit (i.e. the one being edited):

:args `git commitfiles`

where git commitfiles is aliased as:

commitfiles = "!f() {
    cd ${GIT_PREFIX:-./};
    git diff --relative --name-only ${1:-HEAD}^ ${1:-HEAD};
}; f"

in ~/.gitconfig (all on one line - line breaks here are for readability).

Search the commit’s files

You can search only the current buffers with this command:

:noautocmd bufdo vimgrepadd "foo" % | copen

This runs the vimgrepadd command on each buffer and appends results to the quickfix list, which is opened at the end with copen. The noautocmd prefix is a speed optimisation.