可以用git-branch而不是git-checkout创建跟踪分支吗?

时间:2013-12-08 12:29:29

标签: git git-branch

假设远程仓库remote具有在本地存储库中未以任何方式表示/引用的分支spanking_new_branch。我想创建一个跟踪remote/spanking_new_branch的本地分支。

当我在线搜索方法时,我只找到基于git checkout的方法。有没有办法只使用git branch,而不使用git checkout

(这个问题的动机只是为了更好地理解git。)

4 个答案:

答案 0 :(得分:2)

git branch --set-upstream-to=remote/spanking_new_branch local_branchname

其中local_branchname必须已存在。它可以使用git branch local_branchname <start-point>创建(<start-point>是commit-ish,可以省略使用当前提交作为起点)。

这假设本地存储库知道远程分支,例如致电git fetch

答案 1 :(得分:0)

Jonas Wielicki's answer外,您也可以使用git config执行此操作。

本地分支 B 在以下情况下跟踪其他分支:

  • branch.B.remote已设置,
  • branch.B.merge已设置。

跟踪的分支取决于两个值。通常,第一个设置为远程名称,通常为originmerge名称通常与本地名称匹配,因此本地分支master跟踪origin/master (例如)因为branch.master.remote = originbranch.master.merge = master

但是,“远程”名称可以是.,在这种情况下,分支实际上跟踪另一个本地分支! (这仅在其他分支名称不同时才有用 - 如果分支“跟踪自身”,则分支的每次更新也会更新分支的上游,因此分支始终是最新的,这非常愚蠢。:-))< / p>

作为最后一个怪癖,文档说跟踪是通过与遥控器关联的fetch线进行的。我自己没试过,但这意味着,例如:

git config remote.zork.url = ssh://...
git config remote.zork.fetch = '+refs/heads/master:refs/xyzzy/plugh'
git fetch zork
git config branch.master.remote zork
git config branch.master.merge plugh

会导致本地分支master跟踪zork的{​​{1}},即使远程master没有“远程分支”,因为“远程分支”存在zork名称空间与refs/remotes/不同(甚至不包含名称refs/xyzzy/plugh)!

(我不知道为什么会这么复杂。)

答案 2 :(得分:0)

我认为你想要的是:

git branch --track LOCAL_BRANCH_NAME REMOTE/REMOTE_BRANCH_NAME

例如:

git branch --track spanking_new_branch origin/spanking_new_branch

通常,如果您使用与远程分支相同的名称,则可以使用:

git branch --track spanking_new_branch

它会自动设置为跟踪远程版本。

答案 3 :(得分:0)

是的格式是:

git branch --set-upstream ${local_branch} ${remote}/${remote_branch}

使用示例(假设topic1和origin / topic1已经存在):

git branch --set-upstream topic1 origin/topic1