远程存储库包含各种分支,如origin/davis_branch:
$ git branch -r
origin/HEAD -> origin/master
origin/daves_branch
origin/master
如何将daves_branch获取到本地存储库,以便它跟踪origin/davis_branch?
我尝试了:
$ git fetch origin discover
$ git checkout discover
远程存储库包含各种分支,如origin/davis_branch:
$ git branch -r
origin/HEAD -> origin/master
origin/daves_branch
origin/master
如何将daves_branch获取到本地存储库,以便它跟踪origin/davis_branch?
我尝试了:
$ git fetch origin discover
$ git checkout discover
当前回答
我使用了先取后结账。。。
git fetch <remote> <rbranch>:<lbranch>
git checkout <lbranch>
…其中<rbranch>是远程分支或源引用,<lbranch>则是您希望跟踪的尚未存在的本地分支或目标引用,您可能希望将其命名为与远程分支或目标参考相同的名称。这在<refspec>解释中的选项中进行了解释。
Bash非常聪明,如果我在远程分支的前几个字母后制表,它会自动完成第一个命令。也就是说,我甚至不必命名本地分支机构;Bash自动为我复制远程分支的名称。谢谢,Bash!
同样,正如这篇类似的StackOverflow文章中的答案所示,如果您没有在fetch中命名本地分支,那么您仍然可以在使用-b标志签出它时创建它。也就是说,git fetch<remote><branch>后接git checkout-b<branch<remote</<branch>与我的初始答案完全相同。显然,如果您的存储库只有一个远程,那么您只需在fetch之后执行git checkout<branch>,它就会为您创建一个本地分支。例如,您刚刚克隆了一个存储库,并希望从远程查看其他分支。
我相信,提取的一些文档可能是从pull中逐字复制的。特别是选项中关于<refspec>的部分是相同的。然而,我不相信fetch会合并,所以如果您将冒号的目标端留空,fetch应该什么都不做。
注意:git fetch<remote><refspec>是git fetch<remote><refspec>的缩写:因此它不会做任何事情,但git fech<remote><tag>与git feach<remote>><tag>:<tag>相同,它应该在本地复制remote<tag>。
我想,只有当您想在本地复制远程分支时,这才有用,但不一定要立即检查它。否则,我现在将使用已接受的答案,这将在结账说明的第一部分和稍后选项部分的--track解释中详细解释,因为它是一行代码。好有点像一行程序,因为您仍然需要先运行gitfetch<remote>。
仅供参考:<refspec>(来源:destination)的顺序解释了Git1.7之前删除远程分支的奇怪方法。也就是说,不将任何内容推入目标refspec。
其他回答
使用gitbranch-a(本地和远程分支)或gitbranch-r(仅远程分支)查看所有远程及其分支。然后,您可以对远程执行git checkout-t remotes/repo/branch并创建本地分支。
还有一个git-ls-remote命令,用于查看该远程的所有ref和标记。
更新:使用Git Switch
下面写的所有信息都是准确的,但添加了一个新命令gitswitch,简化了工作。
如果daves_branch存在于远程存储库中,但不存在于本地分支中,则只需键入:
git switch daves_branch
由于您在本地没有分支,这将自动使交换机在远程回购上运行。然后,它还将自动设置远程分支跟踪。
请注意,如果daves_branch在本地不存在,则在使用开关之前需要先获取git。
原始帖子
您需要创建跟踪远程分支的本地分支。以下命令将创建一个名为daves_branch的本地分支,跟踪远程分支origin/davis_branch。当您推送更改时,远程分支将被更新。
对于最新版本的Git:
git checkout --track origin/daves_branch
--track是git checkout的简写-b[branch][remotename]/[branch],在本例中[remotename]是原点,[branch是两倍,在本示例中是davesbranch。
对于Git 1.5.6.5,您需要:
git checkout --track -b daves_branch origin/daves_branch
对于Git 1.7.2.3及更高版本,这已经足够了(它可能更早开始,但这是我可以很快找到的最早确认):
git checkout daves_branch
注意,对于最新的Git版本,此命令不会创建本地分支,并将使您处于“分离HEAD”状态。如果需要本地分支,请使用--track选项。
详细信息如下:3.5 Git分支-远程分支,跟踪分支
假设你的遥控器git@xyz.git你想要它的random_branch分支。流程应如下:
首先检查遥控器列表git远程-v如果你没有git@xyz.git在上述命令的输出中,您可以通过git远程添加xyzgit@xyz.git现在,您可以通过git获取xyz现在通过git checkout-b my_copy_random_branch xyz/random_brance检查分支列表查看所有的分支
本地分支my_copy_random_branch将跟踪远程的random_brance分支。
有时,你被要求不要摆弄主分支,只在远程分支工作(正如我被要求的那样)。所以你只需要远程分支。
因此,要单独克隆远程分支(没有主分支),请执行以下操作
git clone url --branch remote_branch_name
哪里remote_branch_name是远程分支的名称
例如
git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git --branch v3.15
这将确保您使用远程分支的名称将远程分支克隆到本地分支。
现在,如果您提交代码并推送,代码将单独提交给该分支。
我键入了
git checkout <branch_name>
并且得到
Branch <branch_name> set up to track remote branch <branch_name> from origin.
Switched to a new branch '<branch_name>'