Git 签出来自origin/dev的分支,但不跟踪origin/dev

Git 签出来自origin/dev的分支,但不跟踪origin/dev,git,git-checkout,Git,Git Checkout,我在bash脚本中有以下几行代码: git checkout -b foo "origin/dev" git push -u origin HEAD 我想做的是创建一个新的分支foo,其父级是origin/dev(请更正我的术语) 问题是我得到了: 这到底是什么意思?当我签出foo并执行gitpush时,我希望它被推送到远程上名为foo的分支。我想当一个本地分支跟踪一个远程分支时,当你按下该分支时,它会转到跟踪分支,对吗 Branch foo设置为从源位置跟踪远程分支开发人员 这意味着您的本地

我在bash脚本中有以下几行代码:

git checkout -b foo "origin/dev"
git push -u origin HEAD
我想做的是创建一个新的分支foo,其父级是origin/dev(请更正我的术语)

问题是我得到了:

这到底是什么意思?当我签出foo并执行gitpush时,我希望它被推送到远程上名为foo的分支。我想当一个本地分支跟踪一个远程分支时,当你按下该分支时,它会转到跟踪分支,对吗

Branch foo设置为从源位置跟踪远程分支开发人员

这意味着您的本地
foo
分支正在跟踪远程
dev
分支。因此,
gitpush
将推送到
dev
分支。您需要将跟踪分支更改为远程
foo
分支

方法之一是:


从本地
foo
分支推送到远程
foo
分支:

$ git push origin HEAD:foo
$ git branch foo --set-upstream-to origin/foo

Or,
$ git branch foo -u origin/foo
将本地
foo
分支的上游设置为远程
foo
分支:

$ git push origin HEAD:foo
$ git branch foo --set-upstream-to origin/foo

Or,
$ git branch foo -u origin/foo
现在,本地
foo
分支正在跟踪到“远程foo”分支。所以,只要
gitpush
就会推送到远程foo分支

Branch foo设置为从源位置跟踪远程分支开发人员

这意味着您的本地
foo
分支正在跟踪远程
dev
分支。因此,
gitpush
将推送到
dev
分支。您需要将跟踪分支更改为远程
foo
分支

方法之一是:


从本地
foo
分支推送到远程
foo
分支:

$ git push origin HEAD:foo
$ git branch foo --set-upstream-to origin/foo

Or,
$ git branch foo -u origin/foo
将本地
foo
分支的上游设置为远程
foo
分支:

$ git push origin HEAD:foo
$ git branch foo --set-upstream-to origin/foo

Or,
$ git branch foo -u origin/foo

现在,本地
foo
分支正在跟踪到“远程foo”分支。因此,只要
gitpush
就可以推送到远程foo分支。

分支没有父分支

分支确实具有上游设置。更具体地说,每个分支名称(形式为
refs/heads/name
的每个本地名称)可以有一(1)个上游,也可以没有上游

使用
git branch
git checkout-b
创建分支时,如果您当时选择设置新分支的上游,git将打印您引用的消息:

这意味着您的
refs/heads/foo
具有上游允许的名称
origin/dev

使用
git checkout-b
创建分支时,如果不希望新分支具有上游分支,请执行以下操作之一:

  • 不要命名有效的上游。例如:

    git checkout -b foo
    
    创建指向当前提交的新分支
    foo
    ,而不为新分支
    foo
    设置上游

  • 使用
    --no track
    选项告诉Git不要设置上游,即使您使用的名称适合安装为上游:

    git checkout --no-track -b foo origin/dev
    
但是,将
foo
的上游设置为
origin/dev
没有问题,因为您可以随时使用
git branch
更改或删除此设置:

git branch --unset-upstream foo
将从
foo
删除当前上游,同时:

git branch --set-upstream-to=origin/xyzzy foo
foo
的上游设置为
origin/xyzy
。最后一个命令的一个约束条件是
origin/xyzy
必须实际存在


(请注意,非常旧版本的Git没有将
--set upstream设置为
。相反,它们有
--set upstream
,这做了同样的事情,但需要交换参数的顺序。这是一个常见的错误源,因此现代Git不推荐使用旧的
--set upstream
选项,将其替换为<代码>--将上游设置为更易于正确使用的

分支没有父分支

分支机构确实具有上游设置。更具体地说,每个分支机构名称(表
refs/heads/name
的每个本地名称)可以有一(1)个上游,也可以没有上游

使用
git branch
git checkout-b
创建分支时,如果您当时选择设置新分支的上游,git将打印您引用的消息:

这意味着您的
refs/heads/foo
具有上游允许的名称
origin/dev

使用
git checkout-b
创建分支时,如果不希望新分支具有上游分支,请执行以下操作之一:

  • 不要命名有效的上游。例如:

    git checkout -b foo
    
    创建指向当前提交的新分支
    foo
    ,而不为新分支
    foo
    设置上游

  • 使用
    --no track
    选项告诉Git不要设置上游,即使您使用的名称适合安装为上游:

    git checkout --no-track -b foo origin/dev
    
但是,将
foo
的上游设置为
origin/dev
没有问题,因为您可以随时使用
git branch
更改或删除此设置:

git branch --unset-upstream foo
将从
foo
删除当前上游,同时:

git branch --set-upstream-to=origin/xyzzy foo
foo
的上游设置为
origin/xyzy
。最后一个命令的约束条件是
origin/xyzy
必须实际存在

(请注意,非常旧版本的Git没有将
--set upstream设置为
。相反,它们有
--set upstream
,这做了同样的事情,但需要交换参数的顺序。这是一个常见的错误源,因此现代Git不推荐使用旧的
--set upstream
选项,将其替换为<代码>--将上游设置为更易于正确使用的
。)