这是我对跟踪 git 分支的理解,如果我在这里遗漏了什么,请纠正我。要跟踪远程分支,您首先要运行git fetch origin,它会带来远程 git 存储库的副本映像。假设您列出了要创建附加分支的分支mybranch,您只需运行git branch mybranch,然后 git 将自动创建一个远程分支并使其跟踪相应的(名称相关)远程分支。很简单!问题是,--track如果 git 能够识别您刚刚创建的分支(基于名称相关性)在origin或远程存储库中可用,为什么大多数 git 人员会谈论该选项?
还有一些其他细节不太正确,但关键在这里:
你只需运行
git branch mybranch,然后 git 就会......让它跟踪相应的(名称相关)远程分支
当您git branch mybranch用来创建分支时,它不会那样做。它确实这样做,至少在默认情况下,如果您运行git branch mybranch origin/mybranch.
git branch mybranch但是,如果您使用,Gitmybranch基于当前提交哈希创建,就像您已经完成了:
git branch mybranch $(git rev-parse HEAD)
Run Code Online (Sandbox Code Playgroud)
命名远程跟踪分支时的默认行为由branch.autoSetupMerge.
该git checkout命令有时也会(但并非总是)使用隐含的--track远程跟踪分支创建新分支。具体来说,给定,有很多可选路径,取决于是否可以解析:git checkout namename
name是现有分支的名称:git checkout尝试切换到该现有分支。name是现有标签的名称,或者通过gitrevisions 文档中描述的多步骤过程解析为提交: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而不是分支。