Git与丢失的历史合并

Git与丢失的历史合并,git,Git,我在一个分支上开发了一个功能。在开发过程中,我们转移到另一个git主机,一些提交被合并到新主机上。我现在正试图将其余部分合并回去,但遇到了一些问题。历史是这样的: B------E-----G | feature branch / \ \ A----C \ \ | master \ \ \ D-----F-----H | new master 在F,

我在一个分支上开发了一个功能。在开发过程中,我们转移到另一个git主机,一些提交被合并到新主机上。我现在正试图将其余部分合并回去,但遇到了一些问题。历史是这样的:

  B------E-----G             | feature branch
 /        \     \
A----C     \     \           | master
      \     \     \
       D-----F-----H         | new master
在F,一个压缩的变化补丁(B:E)被应用于新的主控,所以没有历史记录。我想进行G->H合并,但这样做会产生冲突


实现这种合并的最佳方法是什么,理想情况下保留E和G之间新更改的历史记录?

简单的回答是:解决冲突

如果
E---G
是一系列提交,您可以尝试在
F
的基础上逐个合并它们-这将为您提供一种一次处理一勺冲突的方法。在这之后,您将有办法处理历史记录,最终在
F
之上进行一次合并提交

从您描述的内容来看:
F
是新主机上功能分支的合并提交。历史并没有丢失:它是
B--F
C--F
的混合体

这次合并可能产生了冲突,这些冲突在合并前就解决了。
E
F
之间的区别在于,当您尝试合并
G
F
时,可能会产生冲突


您可以通过以下内容看到这些差异:
git diff E F

“应用了补丁”:您的意思是存在提交
F--F'--H
?@LeGEC-问题更新为更清晰。如果您
git checkout-b wip newmaster;git重置——硬D;git合并E;git合并功能
,即重做但不挤压。如果这样做很干净,那么您可以
git checkout-B newmaster
如果您不介意客户必须重新设置基础或执行
git checkout newmaster;git merge-x他们的wip
否则。当然,如果初始的
git merge E
仍然存在冲突,您可能更愿意直接在newmaster上执行(仅)
git merge-xtheers功能,然后非常仔细地检查结果。