Git:跟踪分支而不签出吗?

时间:2018-07-03 15:02:58

标签: git git-pull git-fetch

因此,我知道您可以不通过以下方式将分支签出:

git fetch origin branchname:branchname

是否可以在不签出的情况下跟踪该分支? (通常,这是通过git checkout --track origin/branchnamegit branch -u origin branchname完成的)答案可以是完全独立的命令,也可以是上述提取的一部分。

1 个答案:

答案 0 :(得分:3)

正如一些评论者所指出的那样,答案已经嵌入到您的问题中:使用git branch --set-upstream-to=origin/branchname branchname(或使用-u的较短版本)。不过,在此处添加一些注释可能很重要。

那不是拉一个分支(或者,也许是这样,因为该短语的定义不正确:-))。那是什么:

  • 从源获取所有必需的提交,然后
  • 根据在branchname的分支 origin 中看到的内容,创建或更新名为 branchname 的本地分支。

如果更新是更新,则如果对 branchname 的更改不是快进操作,则更新将失败。要在这种情况下强制其成功,请添加一个强制标志:--force或前导加号+

如果 branchname 是当前已签出的分支,即HEAD是对该分支的符号引用,则更新也会失败。

如果本地分支已经存在并且已经具有上游设置,则您可能不想覆盖当前的上游设置。您可以使用git rev-parse进行检查:branchname@{upstream}命名 branchname 的当前上游设置,如果没有,则失败,所以:

if ! git rev-parse $branchname@{upstream} >/dev/null 2>&1; then
    git branch --set-upstream-to=origin/$branchname $branchname
fi

如果未设置上游将设置上游,但如果已经设置则不执行任何操作。