如我所见,git --track--set-upstream-to都修改了一个分支,因此它变成了一个跟踪(或上游)分支。但是我无法理解哪里有细微的差别。 --track记录“本地远程分支跟踪”:

$ git checkout foo -b
$ git branch --track origin/retarget

Branch origin/retarget set up to track local branch foo.

$ cat .git/config
[branch "origin/retarget"]
        remote = .
        merge = refs/heads/foo

--set-upstream-to记录“本地分支跟踪远程分支”时:
$ git checkout foo -b
$ git branch --set-upstream-to origin/retarget

Branch foo set up to track remote branch retarget from origin.

$ cat .git/config
[branch "foo"]
        remote = origin
        merge = refs/heads/retarget

两者有什么区别?我确定“跟踪分支”是一个简单的概念,在分支内附加了upstream指针,用于跟踪head存储库中指定分支的remote位置。但是,看起来要复杂得多吗?

最佳答案

$ git checkout foo -b
$ git branch --track origin/retarget

前两个命令指示git执行以下操作:
  • 创建一个名为“origin/retarget”的本地分支(这是一个非常糟糕的主意,因为它被称为远程跟踪分支”,而实际上它是一个简单的本地分支,其名称中带有“/”)
  • 从当前分支开始的
  • (“foo”,另一个本地分支)
  • 使该新的本地分支跟踪其起点。

  • 参见 git branch
    --track
    



    从远程跟踪分支开始创建分支时,将使用跟踪。

    换句话说,您的第一个示例不是--track的用法。
    这样会更好:
    git checkout -b foo --track origin/retarget
    

    至于--track--set-upstream-to之间的区别:
    --set-upstream-to
    

    08-26 11:03