Git:如何将文件与先前提交的自身版本合并?

时间:2013-07-10 23:53:44

标签: git merge git-cherry-pick

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

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

假设我的分支现在在C。

我不想

$ git checkout --patch 

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

我不能做一个挑选,​​因为提交A是一个合并提交(存储库有两个贡献者,我删除了我的导师在合并之后的后续提交中错误地做出的更改)并且我可能会结束如果我指定任何一个父母,一团糟。

除了手动复制文件中我想要的更改外,还有其他方法可以实现吗?

1 个答案:

答案 0 :(得分:5)

您可以create a patch并尝试apply the patch。如果您遇到冲突问题,例如

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的性质,此策略可能仍然存在问题。如果不进行单个提交的分支,则无法分离合并提交的组成组件。您的分支/回购只是将其视为一次提交。

当然,如果你可以访问原始分支,你可以从那里创建一个补丁文件,even if they are in different repositories