Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 如何移植远端分支?_Git - Fatal编程技术网

Git 如何移植远端分支?

Git 如何移植远端分支?,git,Git,这个问题的设置需要一些谨慎的措辞 从最简单的存储库开始:一次提交(如果需要,可以为空) 从这个原始的提交repo中,分别在/path/to/repo1和/path/to/repo2中创建两个单独的克隆。现在想象一下,这两个克隆中的每一个都独立于另一个,演变为一个简单的线性历史 如果在克隆repo1和repo2时,A是原始存储库中的单个提交,则情况可能如下所示: repo1: A-----B-----C-----D-----E-----F-----G-----H-----I-----J-----

这个问题的设置需要一些谨慎的措辞

从最简单的存储库开始:一次提交(如果需要,可以为空)

从这个原始的提交repo中,分别在
/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派生出来的,其中包含commit
A
(如果您重新阅读,这就是有问题的内容)。在这种情况下,它就像我描述的那样工作。如果你不相信我,你自己试试看