从origin / dev检出分支,但不跟踪origin / dev

时间:2018-07-16 03:34:55

标签: git git-checkout

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

  customresourceoutput:
    Value:
      !GetAtt customerResource.responseKeyName -> name of the key from the response

我想要做的是创建一个新的分支foo,其父级是origin / dev。 (请更正我的术语)。

问题是我得到了

git checkout -b foo "origin/dev"
git push -u origin HEAD

那到底是什么意思?当我签出foo并执行git push时,我希望将其推送到远程上名为foo的分支。我以为本地分支机构跟踪远程站点时,按下分支机构后,该跟踪分支会正确吗?

2 个答案:

答案 0 :(得分:2)

分支没有父分支。

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

在使用git branchgit checkout -b创建分支时,如果您当时选择设置新分支的上游,则Git会打印出您引用的消息:

Branch foo set up to track remote branch dev from origin.

这意味着您的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/xyzzy。最后一条命令的一个约束是origin/xyzzy实际上必须存在。

(请注意,非常老的Git版本没有--set-upstream-to。相反,它们具有--set-upstream,它具有相同的作用,但是需要交换参数的顺序。结果是是常见的错误来源,因此现代的Git不赞成使用旧的--set-upstream选项,而用--set-upstream-to代替它,这样更易​​于正确使用。)

答案 1 :(得分:1)

  

Branch foo设置为从源头跟踪远程分支dev。

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

其中一种方法是:


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

$ git push origin HEAD:foo

将本地foo分支的上游设置为远程foo分支:

$ git branch foo --set-upstream-to origin/foo

Or,
$ git branch foo -u origin/foo

现在,本地foo分支正在跟踪“ remote foo”分支。因此,仅git push就会推送到远程foo分支。