如何连接未连接的git历史记录?

时间:2013-10-15 10:26:53

标签: git merge git-branch git-merge

我们的项目中有一个非常奇怪的git历史。首先,还有另一个项目可能具有以下历史:

repo1:

a---b---c

然后有我们的项目

repo2:

u---v---w

因为我们需要在repo2的代码中使用repo1,“智能”程序员使用read-tree将repo1的最后一次提交(c)读入w,所以现在我们已经

u---v---w---w'

其中w'在其中有commit 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

1 个答案:

答案 0 :(得分:3)

输入repo2并添加repo1作为远程

git add remote repo1 url_of_repo1

获取repo1的历史记录

git fetch repo1

现在您的repo2历史记录应为

a---b---c---d---e  repo1/master

u---v---w--w'  master

正如您所看到的,repo1repo2历史仍然无关,并且没有共同的提交。

现在您可以自由mergerebase这两行

使用merge即可

git checkout master
git merge repo1/master

a---b---c---d---e  repo1/master
                  \
u---v---w--w'------x  master

使用rebase,您将获得线性历史记录

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

当然,你必须解决冲突。但这只是一次性问题。

为了让您的生活更轻松,在变基或合并之前,您还可以摆脱w'提交

git checkout master
git reset master^1

将在master提交

上移动您的w分支
相关问题