正如我所看到的,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
Run Code Online (Sandbox Code Playgroud)
虽然--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
Run Code Online (Sandbox Code Playgroud)
这两者有什么区别?我确信"跟踪分支"是一个简单的概念,upstream在分支内部追加指针,跟踪存储库head中指定分支的位置remote.但似乎它要复杂得多吗?
$ git checkout foo -b
$ git branch --track origin/retarget
Run Code Online (Sandbox Code Playgroud)
前两个命令指示git:
origin/retarget" 的本地分支(非常糟糕的主意,因为它被命名为远程跟踪分支",而它实际上是一个简单的本地分支/,其名称中带有' ')foo",另一个本地分支)看到 git branch
--track
Run Code Online (Sandbox Code Playgroud)
创建新分支时,设置
branch.<name>.remote和branch.<name>.merge配置条目以将起点分支标记为新分支的"上游".
从远程跟踪分支开始创建分支时,您将使用跟踪.
换句话说,你的第一个例子不是你将如何使用--track.
这会更好:
git checkout -b foo --track origin/retarget
Run Code Online (Sandbox Code Playgroud)
至于--track和之间的区别--set-upstream-to:
--set-upstream-to
Run Code Online (Sandbox Code Playgroud)
如果指定的分支尚不存在或
--force已经给出,则行为完全相同--track.
否则设置配置,就像--track创建分支时一样,除了分支指向的地方没有改变.
我们假设您有一个master已签出的分支.现在,当你做一个
$ git branch --track someBranch
Run Code Online (Sandbox Code Playgroud)
您将创建一个新分支,命名someBranch将根据master分支跟踪更改.但是这个分支没有远程分支集.因此你remote = .在git配置中看到了.
现在someBranch跟踪它意味着更改将出现在远程存在中git status并且git branch -v就像远程存在一样.
例如,如果您在someBranchgit 上进行提交,则会告诉您,1 ahead当您执行某项操作时,git branch -v或者当您执行此操作时,git status它会向您显示
Your branch is ahead of 'master' by 1 commit.
Run Code Online (Sandbox Code Playgroud)
这是最有趣的部分.跟踪分支,git显示它提前1次提交master(创建时检出的分支someBranch)
| 归档时间: |
|
| 查看次数: |
2845 次 |
| 最近记录: |