在带有 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/foo
将 upstream
的 foo
分支推送到 origin
根本就是一个本地分支。
如您所述,上游远程最常用于使您的复刻与原始存储库保持同步。由于您将更改推送到您的分支而不是直接向上游,因此跟踪 origin/master 是有意义的。一旦您想将更改推送到上游,您就可以发出拉取请求。
问题的 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/foo
将 upstream
的 foo
分支推送到 origin
根本就是一个本地分支。
如您所述,上游远程最常用于使您的复刻与原始存储库保持同步。由于您将更改推送到您的分支而不是直接向上游,因此跟踪 origin/master 是有意义的。一旦您想将更改推送到上游,您就可以发出拉取请求。