Often I’ll fix a bug (call it “bug A”), kick off some tests, and then get stuck. I’d like to start working on bug B, but I can’t because the tests are running and I don’t want to change the repo while they’re going. Luckily, there’s a git tool for that: git-new-workdir. It basically creates a copy of your repo somewhere else on the filesystem, with all of your local branches and commits.
git-new-workdir doesn’t actually come with git-core, but you should have a copy of the git source anyway, right?
$ git clone https://github.com/git/git.git
Copy the git-new-workdir script from contrib/workdir to somewhere on your $PATH. (There are some other gems in the contrib directory, so poke around.)
Now go back to your repository and do:
$ git-new-workdir ./ ../bug-b
This creates a directory one level up called bug-b, with a copy of your repo.
Thanks to Andrew for telling me about this.
Edited to add: Justin rightly asks, what’s the difference between this and local clone? The difference is that git-new-workdir creates softlinks everything in your .git directory, so your commits in bug-b appear in your original repository.