撤消或恢复git am - 已解决

时间:2016-10-26 18:33:58

标签: git git-am git-apply

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

git add .

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

我做了if所以我可以恢复提交,只提交修补程序修改的文件。

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

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

2 个答案:

答案 0 :(得分:2)

你可以完成

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

现在你必须使用

返回错误提交的状态
git reset --soft HEAD@{1}

然后从上面运行git filter-branch命令。

答案 1 :(得分:2)

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

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

如果有多个提交,都包含git commit文件,则需要使用Leon's answer或类似的东西(例如,更长的手动rebase)。您可能希望限制由.rej复制的提交集,因为过滤会复制每个此类提交,这非常慢。

要重置回不正确的提交,请使用git filter-branch,如Leon所说。