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

时间:2017-07-18 11:01:12

标签: git git-track

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

  

--track

     

创建新分支时,设置branch.<name>.remotebranch.<name>.merge配置条目以标记起点   分支作为新分支的“上游”。这个配置会告诉你   git显示git status中两个分支之间的关系   和git branch -v。此外,它指向git pull而没有参数   在签出新分支时从上游拉出。

     

当起点是远程跟踪时,此行为是默认行为   科。将branch.autoSetupMerge配置变量设置为false   如果您希望git checkoutgit branch始终表现得像    - 没有跟踪。如果在起点是本地或远程跟踪分支时需要此行为,请将其设置为always

当他们想要使分支跟踪上游分支时,我可以看到人们与此开关有关

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

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

2 个答案:

答案 0 :(得分:6)

分支的上游分支,或跟踪的远程分支只是您在使用git pull和{{1时默认与之交互的分支命令。

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

git push

它将获取远程git pull origin the_branch ,然后将origin合并到您当前的分支中。

如果您通过设置上游分支来提取相同的分支,则可以启动origin/the_branch

git pull

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

git branch --set-upstream-to origin/the_branch
git pull

推动时,几乎同样的事情 在使用没有参数的git checkout -b origin/the_branch # Is equivalent to git branch --track the_branch origin/the_branch git checkout the_branch 时,配置push.default将确定要推送的默认分支。

使用值git push,它将简单地推入上游分支 使用默认值upstream时,它将执行相同的,但仅限于本地和上游分支名称相同。 我让你看一下doc来检查其他配置的可能性。

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

-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 引用引用:

@{upstream}

push分支作为等效的$ git rev-parse --symbolic-full-name --abbrev-ref @{upstream} origin/the_branch (在99%的用例中它与@{push}相同):

@{upstream}

$ git rev-parse --symbolic-full-name --abbrev-ref @{push} origin/the_branch @{upstream}之间的区别是针对使用三角形工作流程的情况:您从只读&#34;上游&#34; project(通常是由约定@{push}调用的远程)并推送到可写存储库 这就是GitHub上使用的分叉工作流程的情况 我发了一篇(法语)博客文章,here is the auto-translated version

答案 1 :(得分:0)

如果要将本地执行的操作与远程操作相关联,请设置本地分支以跟踪远程分支。

也就是说,当您执行git pullgit fetch时,git会知道在哪里查找更改。如果其他人将某些提交推送到远程分支并且您执行git status它会告诉您,您是远程控制台后面的一些提交。或者,如果你在本地提交了一些提交,它会告诉你在远程之前提交了一些提交。

git status的输出示例:

On branch develop
Your branch is behind 'origin/develop' by 19 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

正如您所看到的,在与同一分支机构中的更多人合作时,这非常有用,因为您始终可以了解他们正在做的事情,并使您的工作保持最新。