git“set-upstream-to”和“track”选项有什么区别

问题描述 投票:0回答:2

最近,我尝试设置本地分支

feature
来跟踪远程分支上的更改,如下所示:

$ git branch --set-upstream feature origin/feature

一切顺利,但我收到一条消息:

The --set-upstream flag is deprecated and will be removed. Consider using --track or --set-upstream-to

我的问题是如何使用

track
set-upstream-to
选项以及它们之间是否存在显着差异。

更新:我正在使用

git
版本
1.8.4

git github version-control git-branch git-remote
2个回答
2
投票

在 Git 中,跟踪(或具有上游)的分支在存储库配置文件 (/.git/config) 中具有类似于以下内容的条目

[branch "feature"]
        remote = origin
        merge = refs/heads/feature

您一直使用的“--set-upstream”选项已直接替换为“--track”

所以

git branch --track feature origin/feature

此外还有一个新语法,如

git branch --set-upstream-to=origin/feature feature

还有

git branch -u origin/feature feature

所有形式的功能都相同。


2
投票

--track
标志旨在创建新分支时使用:

git branch --no-track foo origin/master  # new local foo, with no upstream
git branch --track bar origin/master     # new local bar, tracks origin/master

在这两种情况下,您告诉 git 将创建新的本地分支,当前分支指向第二个参数标识的提交(此处为

origin/master
)。然后,该分支也不会或确实“跟踪”另一个分支(这只是意味着
git status
会说
ahead 2, behind 1
之类的内容,并且
git pull
会知道要合并什么)。

如果您未指定这些选项,

git branch
会根据您是否提供第二个参数来猜测是否跟踪(但另请参阅
branch.autosetupmerge
配置标志)。 (这与分支名称不存在的
git checkout
略有不同;这会查找具有“足够相似”名称的远程跟踪分支)。

旧的

--set-upstream
和新的
--set-upstream-to
是相同的 除了参数顺序/位置之外。正在解决的问题是,要更改 foo
 来跟踪 
origin/master
,您必须编写:

git branch --set-upstream foo origin/master

“看起来像”您要求将

origin/master

 设置为将 
foo
 作为其上游。与:

git branch --set-upstream-to=origin/master foo

很明显,您将

foo

 设置为将 
origin/master
 作为其上游。此外,这允许您设置 
current 分支的上游,而无需编写当前分支的 name

git branch --set-upstream-to=origin/master

这更像是其余的

git branch

 命令(它们都默认在当前分支上工作)。

请注意,旧的

set-upstream

 和新的 
set-upstream-to
 都是在分支已经存在之后使用的。 (此外,猫在膝上和键盘上行走时很难输入这些答案:-))

© www.soinside.com 2019 - 2024. All rights reserved.