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

riv*_*ell 0 git merge git-cherry-pick

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

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

假设我的分支现在在C.

我不想

$ git checkout --patch 
Run Code Online (Sandbox Code Playgroud)

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

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

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

eeb*_*sen 5

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

error: patch failed: <file_name>:1
error: <file_name>: patch does not apply
Run Code Online (Sandbox Code Playgroud)

合并将需要人工干预.

这是一个例子:

$ git format-patch -n <sha_from_commit_you_want_to_merge> > patch_file.patch
$ git apply patch_file.patch
Run Code Online (Sandbox Code Playgroud)

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

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