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