1

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

git add . 
git am --resolved 

我忽略了 rej 文件也存在且未跟踪的部分,但git add .按预期将所有文件添加到暂存区域,git am --resolved最后我提交了包含补丁 diffs 的 rej 文件。

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

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

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

4

2 回答 2

3

你可以简单地完成

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

现在你必须返回错误提交的状态

git reset --soft HEAD@{1}

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

于 2016-10-26T18:52:40.213 回答
2

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

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

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

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

于 2016-10-26T19:31:34.300 回答