什么时候使用git branch --track(开始"watching upstream"的意思)?

When to use git branch --track (meaning of start "watching upstream")?

直到最近,我才知道 --track 切换到 git branch。我阅读了文档并尝试了这个命令,但它对我来说毫无意义。

--track

When creating a new branch, set up branch.<name>.remote and branch.<name>.merge configuration entries to mark the start-point branch as "upstream" from the new branch. This configuration will tell git to show the relationship between the two branches in git status and git branch -v. Furthermore, it directs git pull without arguments to pull from the upstream when the new branch is checked out.

This behavior is the default when the start point is a remote-tracking branch. Set the branch.autoSetupMerge configuration variable to false if you want git checkout and git branch to always behave as if --no-track were given. Set it to always if you want this behavior when the start-point is either a local or remote-tracking branch.

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

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

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

分支的上游分支,或tracked 远程分支只是您在使用[时默认与之交互的分支=16=] 和 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,它将执行相同的操作 但前提是本地和上游分支名称相同 .
我让您查看文档以检查其他配置可能性。


您可以使用 -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}引用引用:

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

推送分支相当于 @{push}(在 99% 的用例中它将与 @{upstream} 相同):

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

@{upstream}@{push} 之间的区别是针对使用三角工作流的情况:您从只读 "upstream" 项目(通常是约定俗成的远程调用)中拉取upstream) 并推送到可写存储库。
GitHub.
上使用的分叉工作流程就是这种情况 我为此做了一个(法语)博客 post,here is the auto-translated version

当您想将本地所做的事情与远程发生的事情联系起来时,您可以设置本地分支来跟踪远程分支。

也就是说,git 会在您执行 git pullgit fetch 时知道在哪里查找更改。如果其他人将一些提交推送到远程分支,而你执行 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)

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