什么';这是git之间的区别--轨道“;及--将上游设置为";?

什么';这是git之间的区别--轨道“;及--将上游设置为";?,git,Git,正如我所看到的,git--track和--set upstream to修改分支,使其成为跟踪(或上游)分支。但我无法理解的细微差别在哪里。--track记录“远程分支跟踪本地”: --将上游设置为记录“本地分支跟踪远程分支”: 这两者有什么区别?我确信“跟踪分支”是一个简单的概念,在分支内部有额外的上游指针,跟踪头指定分支在远程存储库中的位置。但看起来要复杂得多 $ git checkout foo -b $ git branch --track origin/retarget 前两个命令指

正如我所看到的,git
--track
--set upstream to
修改分支,使其成为跟踪(或上游)分支。但我无法理解的细微差别在哪里。
--track
记录“远程分支跟踪本地”:

--将上游设置为
记录“本地分支跟踪远程分支”:

这两者有什么区别?我确信“跟踪分支”是一个简单的概念,在分支内部有额外的
上游
指针,跟踪
指定分支在
远程
存储库中的位置。但看起来要复杂得多

$ git checkout foo -b
$ git branch --track origin/retarget
前两个命令指示git:

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

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

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

换句话说,您的第一个示例不是如何使用
--track

这样做会更好:

git checkout -b foo --track origin/retarget

至于
--跟踪
--之间的差异,将上游设置为

--set-upstream-to
如果指定的分支还不存在,或者已经给出了
--force
,则其行为与
--track

否则设置配置,如创建分支时的
--track
所做的,但分支指向的位置未更改


假设您有一个签出的
master
分支

$ git branch --track someBranch
您将创建一个名为
someBranch
的新分支,该分支的更改将根据
master
分支进行跟踪。但是该分支没有远程分支集。因此,您可以在git配置中看到
remote=。

现在跟踪了
someBranch
,这意味着更改将出现在
git status
git branch-v
中,就像远程存在一样

例如,如果您在
someBranch
git上进行提交,当您执行
git分支-v
或执行
git status
时,git会告诉您您是
1号

Your branch is ahead of 'master' by 1 commit.
这是最有趣的部分。分支被跟踪,git显示它比
master
早1次提交(创建
someBranch
时签出的分支)

--set-upstream-to
$ git branch --track someBranch
Your branch is ahead of 'master' by 1 commit.