I was browsing upcoming changes in Babel today when I spotted a typo. For these kind of tiny fixes I don’t bother: I simply edit the file through GitHub UI and let it forked the repository, name the branch and propose a pull request for me.

But now the maintainer asked me to make my commit message more informative. Fair enough. This shouldn’t take long.

So I fetched a local copy of my fork, made the edit and pushed it back:

1$ git clone https://github.com/kdeldycke/babel.git
2$ cd ./babel
3$ git checkout patch-1
4$ git rebase -i HEAD~10
5$ git push --force

It’s only after looking at the pull request in GitHub that I realized the last ten commits were marked as new and different, while I expected only last one to be featured as a change against master . In a word, I messed-up.

A closer inspection revealed that rebase seems to have introduced extra Committer metadata. And my confidence that it would not made me force the subsequent push .

It’s now time to untangle this mess. I first tried to realign authorship metadata on the last 10 commits ( 665212 being my PR’s root, i.e. the last untouched commit):

1$ git filter-branch --force --env-filter '
2    export GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME"
3    export GIT_COMMITTER_EMAIL="$GIT_AUTHOR_EMAIL"
4' -- 665212..patch-1

Still, commit checksums did not returned to their original value. There must be other metadata involved.

As I wasn’t ready to waste time on doctoring each commit to find the underlying differences, I simply rebased everything to master:

1$ git rebase master
2$ git pull
3$ git rebase origin/master
4$ git push --force

It did work and my PR was now clean and tidy.