Git:如何将文件与以前提交的文件版本合并



我在提交a中对文件进行了一些更改,然后我错误地取消了更改,并在提交B和C中进一步进行了更改。

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

假设我的分店现在在C.

我不想

$ git checkout --patch 

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

我不能做任何选择,因为提交a是一个合并提交(存储库有两个贡献者,我在合并后删除了导师在后续提交中错误做出的更改),如果我指定了其中一个父级,我可能会陷入混乱。

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

您可以创建一个补丁并尝试应用该补丁。如果您遇到等冲突问题

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

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

相关内容

最新更新