Quite often, I find myself using git for non-work related activity on my work laptop. Yeah, yeah, I know.
Normally, I remember to set my email to be my home address before starting work.
$ mymail='dom [at] happygiraffe (dot) net' $ git config user.email $mymail
Of course, you’d use your proper email address, instead of that obfuscated form.
Note that we don’t use
--global. This change is specific to the repository that we’re working in.
Unfortunately, I usually just dive in and start working. About four or five commits down the line, I realise I’ve screwed up. What then?
git filter-branch to the rescue! We just need to change a couple of environment variables and redo each commit.
$ git filter-branch --env-filter "export GIT_AUTHOR_EMAIL=$mymail GIT_COMMITTER_EMAIL=$mymail" master Rewrite 0c5299bf98bf30938bb1d0fc0211aa9f3a9ddcf8 (3/3) Ref 'refs/heads/master' was rewritten
Like all uses of filter-branch, you should only do this on an unpublished repository, as it’s effectively altering history.
There is a reference to the original commits left behind, in case I screwed something up. When you’ve checked that everything looks OK, you can clean up.
$ git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d $ git reflog expire --expire=now --all $ git gc --prune=now Counting objects: 9, done. Delta compression using up to 2 threads. Compressing objects: 100% (7/7), done. Writing objects: 100% (9/9), done. Total 9 (delta 1), reused 0 (delta 0)