在 Git 中,推送本地分支而不跟踪对应的远程分支实际上是什么意思?

问题描述

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

我看过Pro Git的书(BTW很好),搜了各种问题,大家都在讲怎么设置跟踪分支,但是没有人讨论推送一个本地分支不跟踪会有什么后果,而且为什么这样的东西会有用。

解决方法

因此跟踪分支是您的分支正在积极工作的分支。采取以下

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

您已在本地创建了新功能,但在您的遥控器上没有用于新功能的分支。目前您的上游是 staging,因为这是您最近的分支。

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

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

,

如果我忘记了跟踪部分,我会错过什么?

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

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 “同步”),您可能会错过