在 Git 中,在不跟踪相应远程分支的情况下推送本地分支实际上意味着什么?

In Git, what does it actually mean to push a local branch without tracking the corresponding remote?

我在Git中读到如果你想将本地分支推送到远程服务器并使本地分支跟踪远程,你可以使用git push -u mybranch remoteserver/mybranch。我想这意味着如果我在没有 -u 选项的情况下使用 git push 那么它将推送分支但不跟踪它。但“无跟踪推送”到底是什么意思?如果我忘记了跟踪部分,我会错过什么?我知道如果你只是忘记了,你总是可以在事后使用 git branch -u 建立跟踪关系。我的意思是,为什么会有差异?

我看过Pro Git这本书(优秀的BTW)并搜索了各种问题,每个人都在谈论如何设置跟踪分支,但是没有人讨论推送一个结果会是什么没有跟踪的本地分支,以及为什么这样的东西会有用。

所以跟踪分支是您的分支正在积极工作的分支。接下

__________master_________________
    \_____staging(Most recent pushed branch)____
         \_______newFeature (New branch, local)________

您已经在本地创建了新功能,但在您的远程没有新功能的分支。目前您的上游将是 staging,因为这是您最近的分支。

如果你上推你的 newFeature 分支,其他用户可以访问它,但默认情况下它不是你跟踪的分支(即如果你 运行 git pull 你会,从暂存中接收每个人的更改)。但是,当您将跟踪分支设置为新推送的分支时,添加到新功能分支的任何更改都将是拉入的默认值。您始终可以将 staging in (git merge -b staging) 合并到您的功能分支以保持更新。

本质上它是自我描述的:你希望你的本地分支最密切地关注哪个远程分支:那就是你跟踪的分支。

What will I miss out on if I forget the tracking part?

如果您必须推送或拉取提交 to/from 远程部分,您会错过一些立即查看的统计数据。

git status 带跟踪的输出示例

$ git status
On branch mybranch
Your branch is ahead of 'origin/mybranch' by 2 commits.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean

git status 没有跟踪的输出示例

$ git status
On branch mybranch
nothing to commit, working tree clean

您还错过了使用 git push 简单地推动和使用 git pull 简单地拉动的能力(当然,在第一次推动之后您使用 git push -u remoteserver mybranch)。

目前我没有得到任何其他信息,但如果 git 有其他提示,他可以得到你(知道你想要 mybranchorigin/mybranch“同步” ) 你可能会想念他们。