试图了解 git 上游分支

Trying to understand git upstream branch

我有一个 git 项目。远程只有一个 master 分支,在本地我有一个 masterproj-structure 分支。我使用 'git branch -b proj-structure' 创建了 proj-structure 分支。我目前在当地的 proj-structure 分支机构,当我尝试 git push 时,git 建议我使用 git push --set-upstream origin proj-structure。但是我看了一些文章,我应该用git push --set-upstream master proj-structure。设置upstream时masterorigin有什么区别?如果我确实使用了上面的命令,远程将创建一个名为 proj-structure 的分支,并且这个分支将拥有我本地分支所拥有的所有提交,对吗?

您在这里混淆了 git 的两个不同概念。远程和分支。

远程[default: origin]

将遥控器想象成另一台计算机或另一个人。指定类似 origin 的内容将告诉 git who 将您当前的更改集发送给。

分支机构[default: master]

您使用分支来跟踪不同的开发线。例如,您可以使用 master 来保留经过测试且稳定的软件版本,并添加更多分支来尝试新事物。

将它们想象成一个副本,然后您可以对其进行修改。

每个人都单独保存一份。


现在,如果我们不得不独自进行新开发,当然会很无聊。

这就是为什么我们不想只将这些分支保留在我们自己的计算机上,而是与其他人共享其中的一些分支。

通常您会有一台用于交换的中央服务器(例如github)。此服务器是一个 远程 最有可能命名为 origin。推送同步您服务器上的分支与计算机上分支的更改,拉动同步您的计算机与服务器上的更改。

现在,我在计算机的 master 分支上做了一个我知道是稳定的更改。我可以直接push到我们服务器的master分支(origin/master).
为什么?因为 git 已经知道 origin 是正确的 remote 将此分支上的更改推送到并且它也知道我的 master 分支也被称为 master 在那个遥控器上。


现在假设我做了一个很酷的新实验,它在我的软件中添加了一只粉红色的兔子。因为我还不知道我的老板是否认为这是个好主意,所以我暂时将它保留在一个单独的版本中。我创建了一个名为 pink_rabbit.

的新分支

我不能只输入 git push,因为我们的服务器还没有这个副本。由于分支是新创建的,所以没有信息发送给谁。

现在我输入:

git push --set-upstream origin pink_rabbit

这是做什么的: 我告诉 git,origin remote 是将此分支推送到并将更改放在名为 pink_rabbit 的分支中的那个偏僻的。下一次git已经将此信息保存在上游分支中,git push将直接工作。

当然,我可以在这里输入 master,但这样我就可以将本地计算机上的实验版本直接与服务器上的主副本同步。这种首先违背了分支的目的。


那么为什么要有这些上游链接呢?

假设我的公司有一个政策,每个人都必须在服务器上的分支机构前加上他们的名字。

在我的本地机器上,我主要使用我自己的分支。我能做的是:

branch -b pink_rabbit
git push --set-upstream origin tim/pink_rabbit

这将允许我在本地处理 pink_rabbit 并将其作为 tim/pink_rabbit.

发布到服务器

除了一些高级用法之外,您应该始终将您的分支命名为与它们在您的服务器上命名的名称相同(或至少非常非常相似)。