在带有 origin 和 upstream remotes 的 repo 中,我的分支机构应该跟踪什么?

In a repo with origin and upstream remotes, what should my branches be tracking?

问题的 tl;dr 在标题中,但场景如下:

我在 github 上分叉了项目 P,它已经陈旧了一段时间。与此同时,该项目的上游版本一直在向前推进,有一些提交,重要的是,有一些新的分支。

所以,现在我想把它除尘并了解最新情况。我将现有的 P 分支克隆到我的机器中,并检查 git status:

On branch master
Your branch is up-to-date with 'origin/master'.

因此,本地 master 正在跟踪 origin/master。现在,我添加 upstream 远程并执行 git fetch upstream,我看到有一些新分支。我也想将其中一些放入 origin,这就是我感到困惑的地方。经过大量搜索,似乎常见的建议与此处的建议类似:Get new upstream branch with git where you set up new local branches to track the new upstream branches, and then push them into your origin

问题是,在这个过程之后,你的 master 被设置为跟踪 origin/master,而 shinynewbranch 被设置为跟踪 upstream/shinynewbranch,并且这个不对称告诉我出了什么问题。

那么,当同时涉及来源和上游时,关于跟踪的常见约定是什么? "master tracks origin, other branches track upstream" 真的是常见模式吗?

这是一个有点定性的问题。没有 "right answer" - 由您决定给定分支将跟踪两个同样有效的远程中的哪一个。

你可以把任何东西推到任何地方。不必有一个命名的分支来推送一些东西:例如,你可以 git push origin upstream/foo:refs/heads/fooupstreamfoo 分支推送到 origin根本就是一个本地分支。

如您所述,上游远程最常用于使您的复刻与原始存储库保持同步。由于您将更改推送到您的分支而不是直接向上游,因此跟踪 origin/master 是有意义的。一旦您想将更改推送到上游,您就可以发出拉取请求。