你为什么要在git分支中使用'--track'选项?

时间:2017-06-29 20:23:13

标签: git

这是我对跟踪git分支的理解,如果我在这里遗漏了某些内容,请纠正我。要跟踪远程分支,首先运行git fetch origin,它会带来远程git存储库的副本映像。假设您列出要为mybranch创建定位分支的分支,您只需运行git branch mybranch然后git将自动创建一个远程分支并使其跟踪相应的(名称相关)远程科。非常简单! 问题是,为什么大多数git人都会讨论选项--track如果git能够识别你刚刚创建的分支(基于名称相关性)在origin或远程存储库中可用?

2 个答案:

答案 0 :(得分:3)

还有一些其他细节不太正确,但关键在于:

  

您只需运行git branch mybranch,然后git将...使其跟踪相应的(名称相关性)远程分支

当您使用git branch mybranch创建分支时,不会这样做。如果你运行git branch mybranch origin/mybranch,那么 这样做,至少在默认情况下是这样做的。

如果你使用git branch mybranch,Git会根据当前的提交哈希创建mybranch,就好像你已经完成了一样:

git branch mybranch $(git rev-parse HEAD)

,命名远程跟踪分支时的默认行为由branch.autoSetupMerge中的配置设置控制。

git checkout命令有时(但不总是)使用隐含的--track和远程跟踪分支创建新分支。具体来说,给定git checkout name,有许多可选路径,具体取决于是否可以解析 name

  • name 是现有分支的名称:git checkout尝试切换到现有分支。
  • name 是现有代码的名称,或通过the gitrevisions documentation中描述的多步骤过程解析为提交:git checkout尝试将该特定提交检查为独立的HEAD。
  • name 以上任何一项,但只有一个远程跟踪分支,如果被剥离它的远程匹配 name (例如,当没有git checkout develop但是有develop时,您输入origin/develop):在这种情况下, Git将创建一个新的分支develop,用于跟踪" (具有上游)origin/develop,就像git branch具有适当的参数和适当的branch.autoSetupMerge和/或branch.autoSetupRebase设置一样。

如果上述所有操作都失败,git checkout会尝试将 name 解释为路径名。您可以使用git checkout选项 - 终止符强制--跳过上述步骤(并直接进行路径名解释):git checkout -- master表示签出文件名为master ,而不是分支。

答案 1 :(得分:1)

您提到的自动跟踪是一种方便的“速记”,但它并不总是有效。

有时候有多个具有相同分支名称的遥控器;在这种情况下,git不知道要跟踪哪一个,也不会自动设置跟踪信息。

此外,有时您希望本地分支跟踪具有相同名称的远程分支。

我想,有些开发人员可能永远不需要明确设置跟踪信息;但有些人这样做,所以你可以。