我们的项目中有一个非常奇怪的git历史。首先,还有一个项目可能有以下历史:
回购协议1:
a---b---c
然后是我们的项目
回购协议:
u---v---w
由于我们在repo2的代码中需要repo1,一个“聪明的”程序员使用read tree将repo1的最后一个commit(c)读入w,所以现在我们已经
u---v---w---w'
其中有承诺C,但没有它的历史。然后,两个报告都发生了一些变化,导致了以下历史:
a---b---c---d---e
u---v---w---w'---x---y
现在我们要清理混乱,并将repo1的更改合并到我们的存储库中。然而,当简单地合并这两个存储库时,我们会得到非常多的冲突,因为分支不共享历史(实际上它们共享历史,但是git不知道),所以git不能执行三方合并。
那么我们如何才能实现三方融合呢?是否有方法“添加”丢失的历史边缘,即创建如下内容:
a---b---c---d---e
\
u---v---w--w'---x---y
最佳答案
输入repo2
并将repo1
添加为远程
git add remote repo1 url_of_repo1
获取
repo1
的历史记录git fetch repo1
现在你的历史应该是
a---b---c---d---e repo1/master
u---v---w--w' master
如您所见,
repo2
和repo1
历史仍然不相关,没有共同的提交。现在您可以自由地
repo2
或merge
这两行用
rebase
你就可以了git checkout master
git merge repo1/master
a---b---c---d---e repo1/master
\
u---v---w--w'------x master
有了
merge
你将得到一个线性的历史记录git checkout -b rebasing repo1/master
git rebase master
git branch -f master
git checkout master
git branch -D rebasing
u---v---w--w'-a---b---c---d---e master
当然,你必须解决冲突。但这只是一个一次性的问题。
为了使您的生活更轻松,在重新定位或合并之前,您还可以使用
git checkout master
git reset master^1
它将移动
rebase
提交上的w'
分支