假设远程仓库remote
具有在本地存储库中未以任何方式表示/引用的分支spanking_new_branch
。我想创建一个跟踪remote/spanking_new_branch
的本地分支。
当我在线搜索方法时,我只找到基于git checkout
的方法。有没有办法只使用git branch
,而不使用git checkout
?
(这个问题的动机只是为了更好地理解git
。)
答案 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
已设置。跟踪的分支取决于两个值。通常,第一个设置为远程名称,通常为origin
,merge
名称通常与本地名称匹配,因此本地分支master
跟踪origin/master
(例如)因为branch.master.remote
= origin
和branch.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