什么时候使用git branch --track(开始"看上游"的意思)?

san*_*one 6 git git-track

直到最近,我还没有意识到--track切换git branch.我阅读了文档并尝试了这个命令,但对我来说没有任何意义.

--track

创建新分支时,设置branch.<name>.remotebranch.<name>.merge配置条目以将起点分支标记为新分支的"上游".这个配置会告诉git显示两个分支git status 和git 之间的关系branch -v.此外,它在git pull没有参数的情况下指示在检出新分支时从上游拉出.

当起点是远程跟踪分支时,此行为是默认行为.false 如果需要git checkout,将branch.autoSetupMerge配置变量设置为,并git branch始终表现为 - 如果给出了--no-track.always如果在起点是本地或远程跟踪分支时需要此行为,请将其设置为.

我可以看到,当人们想要创建分支跟踪上游分支时,人们会与此开关相关联

这是什么意思?是我还是这个开关描述令人困惑.当我使用term时upstream,我指的是另一个我可以推动更改的远程仓库(fork).

当我开始跟踪远程分支时会发生什么?它在当地表现如何?

zig*_*arn 7

上游分支的分支,或的跟踪远程分支仅仅是默认情况下将使用时与之交互的分支git pullgit push命令.

将分支拉入您的分支时,您可以明确地执行此操作:

git pull origin the_branch
Run Code Online (Sandbox Code Playgroud)

它将获取远程,origin然后合并origin/the_branch到您当前的分支.

如果您通过设置上游分支来总是使用相同的分支,则可以启动git pull:

git branch --set-upstream-to origin/the_branch
git pull
Run Code Online (Sandbox Code Playgroud)

默认情况下,当您从远程分支启动新分支时,git会将其添加为上游分支:

git checkout -b origin/the_branch
# Is equivalent to
git branch --track the_branch origin/the_branch
git checkout the_branch
Run Code Online (Sandbox Code Playgroud)

推动时,几乎是一回事.
配置push.default将确定在git push没有参数的情况下使用时要推送的默认分支.

有了这个值upstream,它就会直接进入上游分支.
使用默认值时simple,它将执行相同的操作,但前提是本地和上游分支名称相同.
我让你看一下doc来检查其他配置的可能性.


您可以使用-vv开关查看所有分支的当前上游分支:

$ git branch -vv
* my_branch       33f2d4c [origin/mybranch] a useful commit
  master          3ed8e99 [origin/master] Merge
  the_branch      dbbb8c0 [origin/the_branch] commit on the branch
Run Code Online (Sandbox Code Playgroud)

分支的上游分支也可以@{upstream}参考引用:

$ git rev-parse --symbolic-full-name --abbrev-ref @{upstream}
origin/the_branch
Run Code Online (Sandbox Code Playgroud)

push分支作为等价物@{push}(它将与@{upstream}99%的用例相同):

$ git rev-parse --symbolic-full-name --abbrev-ref @{push}
origin/the_branch
Run Code Online (Sandbox Code Playgroud)

区分@{upstream}@{push}用于使用三角形工作流的情况:从只读"上游"项目(通常是按惯例调用的远程upstream)拉出并推送到可写存储库.
这就是GitHub上使用的分叉工作流程的情况.
我发了一篇关于此的(法国)博客文章,这里是自动翻译的版本.