git" - track"之间的区别是什么?和" - 设置上游到"?

时间:2014-11-22 10:17:59

标签: git

正如我所看到的,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位置。但似乎它要复杂得多吗?

2 个答案:

答案 0 :(得分:7)

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

前两个命令指示git:

  • 创建一个名为“origin/retarget”的本地分支(非常糟糕,因为它被命名为远程跟踪分支“,而它实际上是一个简单的本地分支,其中包含'/'名)
  • 从当前分支开始(“foo”,另一个本地分支)
  • 使新的本地分支跟踪其起点。

请参阅git branch

--track
  

创建新分支时,设置branch.<name>.remotebranch.<name>.merge配置条目,将起点分支标记为新分支的“上游”。

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

换句话说,你的第一个例子不是你如何使用--track 这会更好:

git checkout -b foo --track origin/retarget

至于--track--set-upstream-to之间的差异:

--set-upstream-to
  

如果指定的分支尚不存在或者已经给出--force,则行为与--track完全相同。
  否则,在创建分支时设置--track之类的配置,除了分支指向的地方未更改

答案 1 :(得分:6)

假设你有一个master分支被检出。现在当你做一个

$ git branch --track someBranch

您将创建一个名为someBranch的新分支,根据master分支跟踪更改。但是这个分支没有远程分支集。因此,您在git配置中看到remote = .

现在跟踪了someBranch,这意味着更改将显示在git statusgit branch -v中,就像遥控器一样。

例如,如果您在someBranch上进行提交,那么当您执行1 ahead或执行git branch -v时,git会告诉您git status它会显示给您

Your branch is ahead of 'master' by 1 commit.

这是最有趣的部分。跟踪分支,git向您显示它在master之前提交1次(在您创建someBranch时已检出的分支)