Git 如何移植远端分支?
这个问题的设置需要一些谨慎的措辞 从最简单的存储库开始:一次提交(如果需要,可以为空) 从这个原始的提交repo中,分别在Git 如何移植远端分支?,git,Git,这个问题的设置需要一些谨慎的措辞 从最简单的存储库开始:一次提交(如果需要,可以为空) 从这个原始的提交repo中,分别在/path/to/repo1和/path/to/repo2中创建两个单独的克隆。现在想象一下,这两个克隆中的每一个都独立于另一个,演变为一个简单的线性历史 如果在克隆repo1和repo2时,A是原始存储库中的单个提交,则情况可能如下所示: repo1: A-----B-----C-----D-----E-----F-----G-----H-----I-----J-----
/path/to/repo1
和/path/to/repo2
中创建两个单独的克隆。现在想象一下,这两个克隆中的每一个都独立于另一个,演变为一个简单的线性历史
如果在克隆repo1
和repo2
时,A
是原始存储库中的单个提交,则情况可能如下所示:
repo1:
A-----B-----C-----D-----E-----F-----G-----H-----I-----J-----K-----L
repo2:
A-----M-----N-----O-----P-----R-----S-----T-----U-----V
,--B-----C-----D-----E-----F-----G-----H-----I-----J-----K-----L
/
A
\
`--M-----N-----O-----P-----R-----S-----T-----U-----V
现在,我想合并这两个克隆,以便生成的提交图如下所示:
repo1:
A-----B-----C-----D-----E-----F-----G-----H-----I-----J-----K-----L
repo2:
A-----M-----N-----O-----P-----R-----S-----T-----U-----V
,--B-----C-----D-----E-----F-----G-----H-----I-----J-----K-----L
/
A
\
`--M-----N-----O-----P-----R-----S-----T-----U-----V
我尝试过很多方法,但我从来没有得到像上面那样的图表…看起来没那么难 首先,如果你想将两个分支机构合并成一个回购协议,那么必须有两个分支机构 只需将克隆1推入远程调用branch1 然后将克隆2推到称为branch2的远程 稍后,返回到any repo并获取最新代码 比尔,
蒂姆这对我来说没有任何问题:
git clone -o repo1 path/to/repo1 target
cd target
git remote add repo2 path/to/repo2
git fetch repo2
git branch master2 repo2/master
此时,您将有两个本地分支:master
跟踪repo1/master
,和master2
跟踪repo2/master
如果您git log master
,它将看起来像L
,K
,J
,…,C
,B
,A
如果您
git log master2
,它看起来像V
,U
,T
,…,N
,M
,A
写下您尝试过的内容。你试过了吗?为什么这些分支会在你的命令之后共享任何历史?因为git就是这样工作的?如果你不相信我,试试看——我有。不,这不是git的工作方式——你只需要使用彼此完全不接触的分支。如果您使用两个相互不是分叉的repo运行列出的命令,请运行以下命令:git merge base master 2
。这将输出两个分支共有的第一次提交,在本例中,这将是零。当然,我假设repo1
和repo2
都是从同一个原始repo派生出来的,其中包含commitA
(如果您重新阅读,这就是有问题的内容)。在这种情况下,它就像我描述的那样工作。如果你不相信我,你自己试试看