将 base 分支从 forked master 更改为 remote master

Change base branch to remote master from forked master

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

我已经尝试过`git rebase --onto 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

Git 本身没有基本分支的概念。分支(大多数情况下——人们以不同的方式使用这个词;参见 What exactly do we mean by "branch"?)只是一个名称,名称包含提交的哈希 ID。名称标识的提交称为 提示提交 。该提交几乎肯定至少有一个 parent 提交 并且 parent(s) 也在分支上。 parent 提交有自己的 parent;这些提交也在分支上。你得到的链,从顶端开始向后工作,枚举分支上的所有提交。

如果你移动 分支标签——Git 将让你任意移动它——更改哪些提交在分支上,而不更改任何内部的任何内容承诺自己。只要提交本身仍在存储库中,您就可以创建任意数量的分支名称来查找它们。将提交视为形成一系列连接:

          C--D--E  <-- branch1
         /
...--A--B
         \
          F--G--H   <-- branch2

您可以在任何您喜欢的地方添加和删除标签,而无需实际更改任何内容(除了现在有一个提交名称 B):

          C--D--E  <-- branch1
         /
...--A--B   <-- branch3
         \
          F--G--H   <-- branch2

git rebase所做的是复制一些提交集,例如,将新副本放在这组提交中更合适的位置。例如,假设当前 可从 branch2 到达的三个提交——从右边开始向左边工作,我们找到 H,然后 G,然后 F——如果它们出现在 branch1 上的 last 提交之后,将会得到改进。为此,您可以 运行:

git checkout branch2
git rebase --onto branch1 branch3

告诉 Git:从我所在的位置 branch2 开始查找提交,但在两个分支汇合的 branch3 处停止。现在您有了正确提交的列表,将它们一一复制,从 F 开始,然后是 G,最后是 H。在开始复制提交之前,请检查提交 E.

我们将 F 的副本称为 F',以表示它与 F 的相似程度,即使它具有不同的哈希 ID。复制完成后,图片将如下所示:

                  F'  <-- HEAD
                 /
          C--D--E  <-- branch1
         /
...--A--B   <-- branch3
         \
          F--G--H   <-- branch2

rebase 将继续复制 GH,然后作为最后一幕,会将名称 branch2 向上拉,使其指向 H:

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

因为 git log 默认情况下不会 显示 任何被放弃的提交,当你 运行 git log 你会看到:

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

它会看起来像 提交移动了。他们没有:他们被更新的更闪亮的提交所取代,而旧的沉闷的提交仍然在存储库中。 (如果新的闪亮的东西坏了,你可以把你的名字 branch2 改回原来的名字,只要你在它们过期之前抓住它们。默认情况下它们至少可以使用 30 天。 )

Git中心

GitHub 基础分支的概念是,根据 this GitHub page:

the parent repository's default branch.

parent 存储库 的概念同样是 GitHub 特定的:Git 存储库没有 parents .

GitHub 帮助页面接着说:

If the default parent repository isn't correct, you can change both the parent repository and the branch with the drop-down lists ...

因此,要更改 parent 存储库,请使用 GitHub 网络界面。选择正确的 parent 存储库后,基础分支将是该存储库的默认分支。要更改 GitHub-hosted 存储库的默认分支,请使用 GitHub 网络界面(如 this page 中所述)。

有关协作的更多 GitHub 信息,请从 this page 开始。