撤消或还原 git am --resolved

undo or revert git am --resolved

我正在手动应用补丁,完成后我做了以下操作

git add . 
git am --resolved 

我忽略了 rej 文件也存在但未被跟踪的部分,但是 git add . 按预期将所有文件添加到暂存区并且 git am --resolved 我最终提交了我的 rej 文件其中有补丁差异。

我做了一个 git reset --soft HEAD^ 所以我可以恢复提交并只提交补丁修改的文件。

但现在的问题是提交消息和作者不会再从补丁文件中提取,因为我做了 git 提交。

如何撤消已解决的 git 以便我可以删除 rej 文件并再次解决以便提交消息和作者完好无损?

你完全可以做到

git filter-branch --tree-filter 'rm rejfile' HEAD^..

现在你必须return到错误提交的状态

git reset --soft HEAD@{1}

然后 运行 来自上面的 git filter-branch 命令。

听起来补丁中只有一个提交。

最简单的方法在这种情况下(仅一次提交)是 git reset 返回 到不正确的提交,然后删除多余的文件 (git rm ...) 并使用 git commit --amend--amend 选项告诉 git commit 重新使用现有的消息和作者,并从当前索引进行新提交,将旧提交推到一边。

如果有多个提交,都包含 .rej 文件,您将需要使用 或类似的东西(例如,更长的手动变基)。您可能希望限制 git filter-branch 复制的提交集,因为过滤会复制每个此类提交,这非常慢。

如 Leon 所说,要重置回不正确的提交,请使用 git reset --soft HEAD@{1}