0

我在提交 A 中对文件进行了一些更改,然后我错误地撤消了更改,并继续在提交 B 和 C 中进行更改。

我希望提交 A 中的更改在我的文件中,但 B 和 C 中的更改也不应该丢失。

假设我的分支现在在 C.

我不想

$ git checkout --patch 

因为我希望文件包含我在 B 和 C 中所做的更改,并且从提交 A 中签出文件将重写索引和工作树中的文件。

我不能做一个樱桃选择,因为提交 A 是一个合并提交(存储库有两个贡献者,我删除了我的导师在合并后的后续提交中错误地做出的更改),我最终可能会得到一个如果我指定了任何一个父母,那就一团糟。

除了手动复制文件中我想要的更改之外,还有其他方法可以完成此操作吗?

4

1 回答 1

5

您可以创建补丁并尝试应用补丁。如果您遇到冲突问题,例如

error: patch failed: <file_name>:1
error: <file_name>: patch does not apply

合并将需要人工干预。

这是一个例子:

$ git format-patch -n <sha_from_commit_you_want_to_merge> > patch_file.patch
$ git apply patch_file.patch

由于提交 A 的性质,这种策略可能仍然存在问题。如果不访问进行单个提交的分支,就无法分离合并提交的组成部分。您的分支/回购只是将其视为一次提交。

当然,如果您确实可以访问原始分支,您可以从那里创建一个补丁文件,即使它们位于不同的存储库中

于 2013-07-11T00:17:07.160 回答