最近,我尝试设置本地分支
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 中,跟踪(或具有上游)的分支在存储库配置文件 (/.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
所有形式的功能都相同。
--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
都是在分支已经存在之后使用的。 (此外,猫在膝上和键盘上行走时很难输入这些答案:-))