合并两个类似的Git存储库?

时间:2013-11-19 14:33:31

标签: git git-merge

我有两个存储库,其中一个是另一个存储库的克隆。

基本上发生的事情是创建了第一个repo(A)然后生成了一些工作并生成了一堆历史记录,然后通过文件复制获取了一个克隆但没有创建分支。复制的仓库(B)已经进行了更改和提交,第一个仓库(A)已经进行了更改和提交。

我现在需要将两个repos合并为一个,这样我就可以根据需要与冲突解决方案进行所有更改。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

没有创建分支机构不是一个大问题。如果你有共同的提交,那么应该很容易。

首先找到常见提交

从A创建一个新分支,它应该指向存储库A的HEAD。合并它时,它会自动找到它实际分支的位置。我们将HEAD保存在不同的分支中以合并到隔离分支中。如果你陷入困境,原始分支及其提交仍然可用,你可以简单地删除带有乱搞合并的分支。

在进行任何合并之前,我通常会保存原始提交的干净分支。我在另一个分支上工作,我可以移动(重置)到任何地方,然后完成工作。我用合并的分支替换原始分支。您可以将其视为检查点。如果你弄乱了什么。回到检查站,然后重新开始。如果您有非常复杂的合并,则可以根据需要保存尽可能多的检查点。你以后只需要清理。

git checkout -b "MergeAB"

其次,您必须将存储库B中的代码转换为A

通常应该可以从B中取出" ../ B"是B存储库的路径。它将获取一个名为" FETCH_HEAD"的分支。

git fetch ../B

From ../B
* branch            HEAD       -> FETCH_HEAD

第三次合并

只需将FETCH_HEAD分支合并到您的工作分支中,然后合并成功。您可以将原始分支重置为MergeAB分支并删除MergeAB

git merge FETCH_HEAD

<强>最后

解决冲突

注意:

我不太确定但是将B合并到A可能会产生与将A合并到B中不同的结果。我知道当某些变化出现在不同的顺序中时合并可能很困难。如果有人在更改后将旧文件复制到其存储库中。旧文件在新更改最终看起来像恢复为旧版本的更改后提交。

我首先写信使用reset,但这并不是必需的。如果你因为某种原因丢失了最后一次提交。这可能会帮助您找回它。

git fsck --lost-found | grep commit | cut -f3 -d" " | xargs -n1 git log -n1

它将显示所有&#34;悬挂&#34;提交(没有分支)。即使提交可能看起来已删除。应该可以在任何好的观众中看到他们的&#34;哈希&#34;。

答案 1 :(得分:0)

在合并两个repos的情况下,就像一个是其他的修改副本。 您可以使用meld之类的工具来简化操作。只需在工具中添加两个文件夹,然后保留一个作为标准。它有非常简单的选项,可以使用点击包含更改和推送内容。这样可以确保没有错过任何更改,并且可以进行非常好的比较。enter image description here

如果需要在很长一段时间后合并两个分支,请使用rebase而不是merge。