上游是回购还是分支?

Upstream is a repo or a branch?

我有一个关于上游的问题,如果我按照正确的流程使用原始仓库更新我的叉子。我应该做类似

的事情
git remote add upstream 'link'

然后是

git fetch upstream 

更新 upstream/master

这意味着,它是一个跟踪回购协议。它也可以创建为上游跟踪分支吗?然后我可以像

那样切换
git checkout branchname

这两种方法有什么区别?

要更新分支,主分支:

git remote add upstream 'link'
git checkout master
git fetch upstream 
git merge upstream/master
git push origin

我认为您混淆了远程存储库远程跟踪分支

什么是远程存储库?

给定存储库 R远程存储库R 的克隆,通常通过网络与其物理分离。

如果您想跟踪远程存储库中发生的事情,您可以从 R 添加对它的引用。此引用称为 remote,通常命名为 origin

来自 Git 词汇表:

Most projects have at least one upstream project which they track. By default origin is used for that purpose.

"upstream"是什么意思?

就 Git 而言,所有存储库都是平等创建的 — 但是 ,在几乎所有项目中都有一个存储库层次结构,其中顶部是每个人都同意的存储库是规范

这是一个例子:

      +-------+
      |       |
      |  Git  |         <-- upstream
      |       |
      +---+---+
          ^
          |
+---------+---------+
|                   |
|  Git for Windows  |   <-- origin
|                   |
+---------+---------+
          ^
          |
   +------+------+
   |             |
   |  Your Fork  |
   |             |
   +-------------+

Your Fork 的角度来看,如果您想跟踪 Git for Windows 中发生的事情,您将调用该远程存储库 origin,因为那是您克隆的那个。

如果您还想跟踪规范 Git 存储库中发生的事情,您可以将该远程引用命名为 upstream,因为它 更上一层楼 存储库的层次结构向下流动

Git glossary summarizes the distinction between origin and upstream well:

Most projects have at least one upstream project which they track. By default origin is used for that purpose. New upstream updates will be fetched into remote-tracking branches named origin/name-of-upstream-branch.

这引出了我们的下一个问题。

什么是远程跟踪分支?

远程跟踪分支 是存在于您要跟踪的远程存储库中的分支。

同样,来自 Git glossary

A ref that is used to follow changes from another repository.

这些分支通常命名为:

<remote-name>/<branch-name>

允许您将它们与您的 本地分支 区分开来,即仅存在于您的本地存储库中的分支。

例如:

upstream/master  <-- master branch in the upstream repo
origin/master    <-- master branch in the origin repo
master           <-- local master branch

请记住,远程跟踪分支是 只读的 — 您可以通过 运行 [=22= 使用远程分支中发生的任何新提交来更新它们],但你不能向他们承诺。从这个意义上说,您可以将它们更多地视为 书签

什么是上游分支?

当您从本地存储库跟踪远程存储库时,您很可能会与其他贡献者在相同的分支上工作。

但是,我们知道远程跟踪分支只是书签,所以我们不能直接提交给它们。

解决方案是创建本地分支(我们可以承诺)并将它们关联到远程分支。这使我们能够使用 git pullgit push.

快速将更改从 远程跟踪分支 引入我们的本地分支,反之亦然

在这种情况下,Git 词汇表与 its definition:

有点神秘

upstream branch
The default branch that is merged into the branch in question.

换句话说,上游分支是本地分支的远程副本;这种关系的存在仅仅是为了让这些分支保持同步而不必通过名称明确引用它们。