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_Github_Branch_Rebase - Fatal编程技术网

Git 将基本分支从分叉主分支更改为远程主分支

Git 将基本分支从分叉主分支更改为远程主分支,git,github,branch,rebase,Git,Github,Branch,Rebase,我将回购协议分叉到我自己的回购协议a,创建了一个新的分支a并做了一些工作,然后将远程回购协议更改为我将为其发出拉取请求回购协议B。但我的分支仍在跟踪对Repo A主分支的提交我如何将我的基础更改为Repo B的主分支。我已经推到正确的远程分支 我已经试过了,git rebase,在master上 (commit 1) - master \-- (commit 2) - (commit 3) - demo

我将回购协议分叉到我自己的
回购协议a
,创建了一个新的分支a并做了一些工作,然后将远程回购协议更改为我将为其发出拉取请求
回购协议B
。但我的分支仍在跟踪对
Repo A
主分支的提交我如何将我的基础更改为
Repo B
的主分支。我已经推到正确的远程分支

我已经试过了,git rebase,在master上

(commit 1) - master
                \-- (commit 2) - (commit 3) - demo
                                                \-- (commit 4) - (commit 5) - PRO

(commit 1) - master
                |-- (commit 2) - (commit 3) - demo
                \-- (commit 4) - (commit 5) - PRO
吉特 Git本身没有基本分支的概念。分支(大多数人以不同的方式使用这个词;请参阅)只是一个名称,该名称包含提交的哈希ID。名称标识的提交称为提示提交。该提交几乎肯定至少有一个父提交,并且父提交也在分支上。父母有自己的父母;这些提交也在分支上。通过从顶端开始并向后操作得到的链枚举了分支上的所有提交

如果您移动分支标签,Git将允许您任意移动它,以确保提交的更改位于分支上,而不会更改任何提交本身内部的任何内容。只要提交本身仍在存储库中,就可以创建任意数量的分支名称。将提交视为形成一系列连接:

          C--D--E  <-- branch1
         /
...--A--B
         \
          F--G--H   <-- branch2
git-rebase
所做的是复制一组提交,例如,将新副本放在这组提交中更合适的位置。例如,假设当前只能从
branch2
访问的三个提交—从右侧开始,向左移动,我们发现
H
,然后
G
,然后
F
—如果它们位于
branch1
上的最后一个提交之后,则会得到改进。要实现这一点,您可以运行:

git checkout branch2
git rebase --onto branch1 branch3
它告诉Git:从我所在的位置开始查找提交,
branch2
,但在两个分支会聚的位置停止。现在您已经有了正确提交的列表,请逐个复制它们,从
F
开始,然后执行
G
和最后一次
H
。在开始复制提交之前,请检查提交
E

让我们调用
F
F'
,来表示它与
F
的相似程度,即使它具有不同的散列ID。一旦复制完成,图片将如下所示:

                  F'  <-- HEAD
                 /
          C--D--E  <-- branch1
         /
...--A--B   <-- branch3
         \
          F--G--H   <-- branch2
由于默认情况下,
git log
不会显示任何放弃的提交,因此当您运行
git log
时,您将看到:

                  F'-G'-H'  <-- branch2 (HEAD)
                 /
          C--D--E  <-- branch1
         /
...--A--B   <-- branch3
F'-G'-H'
                  F'-G'-H'  <-- branch2 (HEAD)
                 /
          C--D--E  <-- branch1
         /
...--A--B   <-- branch3
         \
          F--G--H   [abandoned]
                  F'-G'-H'  <-- branch2 (HEAD)
                 /
          C--D--E  <-- branch1
         /
...--A--B   <-- branch3