何时使用git branch --track(开始“看上游”的含义)?
直到最近,我还没有意识到--track
切换为git branch
。我阅读文档并尝试了这个命令,但它对我来说没有意义。何时使用git branch --track(开始“看上游”的含义)?
--track
当创建一个新的分支,建立
branch.<name>.remote
和branch.<name>.merge
配置条目来标记起始点 分支作为从新的支路“上游”。此配置将告诉 git显示git status
和gitbranch -v
中两个分支之间的关系。此外,它指示git pull
没有参数 从新的分支签出时从上游拉。当起始点是远程跟踪 分支时,此行为是缺省值。如果您希望
git checkout
和git branch
的行为始终如同 - 没有给出轨道,请将branch.autoSetupMerge配置变量设置为false
。如果您想在起点为本地或远程跟踪分支时想要这种行为,请将其设置为always
。
我可以看到人们使用这个开关时,他们要使分支轨道上游分支
是什么意思?是我还是这个开关描述很混乱。当我使用术语upstream
时,我指的是我可以推送更改的另一个远程回购(叉)。
当我开始跟踪远程分支时会发生什么?它如何在本地显示?
一种上游分支分支的,或跟踪远程分支仅仅是默认情况下将使用git pull
和git 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。
设置本地分支以跟踪远程分支,以便将您在本地执行的操作与远程执行的操作相关联。
也就是说,当你做git pull
或git 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)
正如你可以看到在同一分支与更多的人一起工作时是非常有用的,因为你总是可以知道他们在做什么,并保持自己的作品,以日期。
你解决了怀疑与'默认情况下,当你从远程启动一个新的分支时,git会将它添加为上游分支:'。这就是为什么我看不出差异,因为每次我在某个分支时,我都会通过'git pull'刷新它,而不必指定分支名称。我知道,如果我从检查出来的分支中拉出/推送,Git会从远端拉出那个分支。 – sandalone