2017-07-18 335 views
4

直到最近,我还没有意识到--track切换为git branch。我阅读文档并尝试了这个命令,但它对我来说没有意义。何时使用git branch --track(开始“看上游”的含义)?

--track

当创建一个新的分支,建立branch.<name>.remotebranch.<name>.merge配置条目来标记起始点 分支作为从新的支路“上游”。此配置将告诉 git显示git status 和git branch -v中两个分支之间的关系。此外,它指示git pull没有参数 从新的分支签出时从上游拉。

当起始点是远程跟踪 分支时,此行为是缺省值。如果您希望git checkoutgit branch的行为始终如同 - 没有给出轨道,请将branch.autoSetupMerge配置变量设置为false 。如果您想在起点为本地或远程跟踪分支时想要这种行为,请将其设置为always

我可以看到人们使用这个开关时,他们要使分支轨道上游分支

是什么意思?是我还是这个开关描述很混乱。当我使用术语upstream时,我指的是我可以推送更改的另一个远程回购(叉)。

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

回答

4

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

当拉一个分支到你的,你可以明确地做到这一点:

git pull origin the_branch 

,将取回远程origin然后合并origin/the_branch到当前的分支。

如果使用总是拉同一分支,通过设置上游分支,你可以启动git pull

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

默认情况下,当你开始从远程一个新的分支,git会增加它作为上游分支:

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,它将简单地推入上游分支。
使用默认值simple,它将执行相同的,但前提是本地和上游分支名称相同
我让你看看文档来检查其他配置的可能性。

$ 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}参考被称为:


可以通过使用-vv开关看到所有的分支的电流上游分支

$ git rev-parse --symbolic-full-name --abbrev-ref @{upstream} 
origin/the_branch 

推送分支作为等价的@{push}(它将与99%的使用cas中的@{upstream}相同ES):

$ git rev-parse --symbolic-full-name --abbrev-ref @{push} 
origin/the_branch 

@{upstream}@{push}之间的区别是,当你使用一个三角形的工作流程的情况:您从只读“上游”项目(通常是远程按照惯例upstream叫拉),推一个可写入的存储库。
这是在GitHub上使用分叉工作流的情况。
我发了一篇关于此的(法语)博客文章,here is the auto-translated version

+0

你解决了怀疑与'默认情况下,当你从远程启动一个新的分支时,git会将它添加为上游分支:'。这就是为什么我看不出差异,因为每次我在某个分支时,我都会通过'git pull'刷新它,而不必指定分支名称。我知道,如果我从检查出来的分支中拉出/推送,Git会从远端拉出那个分支。 – sandalone

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) 

正如你可以看到在同一分支与更多的人一起工作时是非常有用的,因为你总是可以知道他们在做什么,并保持自己的作品,以日期。

相关问题