我们的项目中有一个非常奇怪的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

如您所见,repo2repo1历史仍然不相关,没有共同的提交。
现在您可以自由地repo2merge这两行
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'分支

08-28 00:56
查看更多