Objective
To undo the command git commit --amend
.
Background (TL;DR)
Tonight, I changed something in a Git repository, and wanted to write
a Git commit, but I carelessly ran git commit --amend
, instead of
git commit --all
. As a result, I was brought to a Vim buffer which
showed the commit message of the latest commit. I quit the editor
with :q
. Unfortunately, the SHA-1 name of that commit was
replaced with another one. The original latest commit had been
pushed to GitHub. In other words, I amended a pushed commit—this is
an absolutely bad practice!1 Therefore, I need to undo the
“amendment” to the commit.
Solution
I googled “undo git commit amend”, and, at the first glance, found three relevant web pages.
-
A question on Stack Overflow
At first, I didn’t understand what
HEAD@{1}
was, and jumped to the next item. -
An article on Pivotal Labs
I just skimmed through the whole essay for commands. I didn’t think that
git diff 8751261..9d3a192 | git apply -
was helpful. I feared that applying older commits would lead to the failure ofrake deploy
. What I learnt from this site was the existence of the commandgit reflog
. -
A blog post which has a link to a YouTube video on Coderwall (URL)
By viewing the video fullscreen in HD, I was finally sure what
git reflog
really did. To save time, I suggest users to look at the terminal at 2:38.
Going back to the first item, I’ve eventually understood the chosen answer.
Lessons learnt
For non-professionals, using multimedia to illustrate abstract ideas is better than just using words.
-
According to the original version of a GitHub help page, changing a pushed commit will “cause the wrath of Git gods”. However, the quoted phrase has gone, but I can still find it on Stack Overflow. ↩