执行
git commit --amend后,如果想撤销这次amend操作,恢复到它之前的那个 commit 状态,你需要使用git reflog和git reset命令。
核心思路
git commit --amend 并不是真的"修改"了上一个提交,而是创建了一个全新的提交 来替换掉它。不过,Git 并不会立即丢弃那个被替换掉的旧提交,它只是暂时"隐藏"了起来。我们可以通过 git reflog 找到这个旧提交,然后将分支指回它。
步骤一:查找历史记录 (git reflog)
首先,在你的终端里运行 git reflog 命令。这个命令会显示 HEAD 指针最近的所有移动记录,包括每一次 commit、amend、reset 等操作。
你会看到类似下面的输出:
bash
a1b2c3d HEAD@{0}: commit (amend): Your new amended commit message
f9e8d7c HEAD@{1}: commit: Your original commit message
... (更早的记录)
分析这个输出:
HEAD@{0}是你当前所在的位置,也就是git commit --amend之后创建的新提交 (a1b2c3d)。HEAD@{1}就是你执行amend操作之前 的那个提交,也就是你想要恢复到的原始提交 (f9e8d7c)。
你的目标就是恢复到 HEAD@{1} 这个状态。
步骤二:重置分支状态 (git reset)
找到了目标提交后,使用 git reset 命令将当前分支的 HEAD 指针移回那个原始提交.
如果你只是想撤销 amend 这个提交动作,但又希望保留 你在 amend 时所做的代码修改,可以使用 --soft 或 --mixed 参数。
-
使用
--soft:perlbash git reset --soft HEAD@{1}这会撤销
amend提交,并将amend中所做的所有代码改动放回到暂存区(Staged) 。你可以重新git commit。 -
使用
--mixed(默认选项):perlbash git reset --mixed HEAD@{1} # 或者 git reset HEAD@{1}这会撤销
amend提交,并将amend中所做的所有代码改动放回到工作区(Working Directory) ,你需要重新git add和git commit。