git 如何在事后从分叉的存储库中获取分支

t1qtbnec  于 2022-12-25  发布在  Git
关注(0)|答案(2)|浏览(147)

我正在做一个教程,教程实际上提供了一个git仓库,可以用来派生和使用.当我派生仓库时,我只派生了master分支,因为我认为这是我唯一需要的.
下一个任务是从那个仓库中 checkout 一个特定的分支。我不太清楚该怎么做。
我知道,我可以简单地创建一个新的回购协议,并再次分叉整个事情,但这将把我扔回到开始,并在一定程度上扰乱流。
因此,我尝试将源代码repo(由教程提供)添加为remote(在我的forked repo旁边), checkout 分支,将其推送到我自己的forked repo并相应地重定基。
这不起作用。
我确实添加了源代码repo作为remote,当我运行git remote时,它就列在那里了。但是,没有一个分支是这样的。当我使用git branch时,我看到的只是我自己的master分支。
我也试过'git fetch -t source/分支,但也不管用。
我看到this answer,这基本上是我尝试,但当我尝试结帐时,我得到这个错误:

# German
# fatal: 'source/branch' ist kein Commit und es kann kein Branch 'branch' aus diesem erstellt werden.

# English
# fatal: 'source/branch' is not a commit and  branch 'branch' could not be created

有没有什么方法可以正确地做到这一点,而不是从头开始,通过分叉源repo agian?你能解释一下为什么我的方法没有工作吗?

v8wbuo2f

v8wbuo2f1#

当我使用git branch时,我看到的只是我自己的master分支。
正确,因为git branch只列出了你 * 创建 * 的 * 本地 * 分支,1而你没有 * 创建 * 任何其他本地分支。但是当你说git branch --all时,你看到了 * 所有 * 分支。然后你可以在本地 checkout 它们中的任何一个。
我将演示(如果你愿意,可以在你的机器上进行沿着),我进入https://github.com/BLeeEZ/amperfy(随机选择的!)并创建一个fork,犯了和你一样的错误,我选择只使用master分支,然后使用GitHub给我的指令将我的fork克隆到我自己的计算机上:

% git clone git@github.com:mattneub/amperfy.git
% cd amperfy

现在,我仍然假装是你,我意识到我需要所有的树枝;所以我决定添加原始的作为第二个远程。通常将其称为upstream(而不是source),所以我将这样做:

% git remote add upstream https://github.com/BLeeEZ/amperfy

现在我必须使用fetch才能从upstream中得到分支(也许这是您忘记的步骤?您没有在任何地方提到它):

% git fetch --all

好的,当我说仅仅是git branch时,我只看到了我自己的master分支,正如您所说:

% git branch
* master

但是当我说git branch --all的时候,它们都在那里!

% git branch --all
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/upstream/HysteriaPlayer
  remotes/upstream/develop
  remotes/upstream/gapless
  remotes/upstream/gaplessStreamingKit
  remotes/upstream/master
  remotes/upstream/miniPlayerNextButton

您可以看到,我确实拥有来自upstream的所有分支,这是与您的source相对应的第二个遥控器。
最后,假设我想在本地检查其中一个分支,我将检查gapless

% git switch gapless

很快,我就创建了一个对应于upstream/gapless的本地gapless分支,如果需要的话,我现在可以使用这个分支,并最终将它推到我自己的fork:

% git push origin gapless

1.你可能会说:那么master是从哪里来的呢?我从来没有“创建”过它。好吧,你确实“创建”了它。当你使用git clone时,Git会帮你节省一个步骤,将远程分支的默认分支 checkout 为本地分支,从而为你创建它。实际上,你可以在克隆时取消这一步骤(通过说-n),从而最终根本没有本地分支。这实际上可以是一件非常有用的事情,我经常这样做。

3pmvbmvn

3pmvbmvn2#

我已经介绍了如何在使用Forking Strategy时处理来自PR的远程分支,以及如何将本地更改提交回原始fork分支,这也会更新PR。这需要您具有远程repo的write权限。否则,您只能将PR发送给原始作者。
我使用BitBucket服务器。
https://blog.jeremyfiel.com/bitbucket-pull-pr-and-commit-local-changes-remote-forks

相关问题