直到最近,我还没有发现--track
切换git branch
。我阅读了文档并尝试了这个命令,但对我来说没有任何意义。
--track
创建新分支时,设置
branch.<name>.remote
和branch.<name>.merge
配置条目以标记起点 分支作为新分支的“上游”。这个配置会告诉你 git显示git status
中两个分支之间的关系 和gitbranch -v
。此外,它指向git pull
而没有参数 在签出新分支时从上游拉出。当起点是远程跟踪时,此行为是默认行为 科。将branch.autoSetupMerge配置变量设置为
false
如果您希望git checkout
和git branch
始终表现得像 - 没有跟踪。如果在起点是本地或远程跟踪分支时需要此行为,请将其设置为always
。
当他们想要使分支跟踪上游分支时,我可以看到人们与此开关有关
这是什么意思?是我还是这个开关描述令人困惑。当我使用术语upstream
时,我指的是另一个我可以推动更改的远程仓库(fork)。
当我开始跟踪远程分支时会发生什么?它是如何在本地表现出来的?
答案 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 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)
正如您所看到的,在与同一分支机构中的更多人合作时,这非常有用,因为您始终可以了解他们正在做的事情,并使您的工作保持最新。