Git获取远程分支
我和我的同事正在研究同一个存储库,我们将它分为两个分支,每个分支在技术上适用于不同的项目,但它们有相似之处,所以我们有时想要从分支中重新提交给* master。
但是,我有分支,我的同事怎能具体拉那个分支。 回购的git clone
似乎并没有在本地为他创建分支,尽管我可以在推动我的结局之后看到他们生活在一个无情的世界。
另外,当我最初做分支时,我做了-b checkout
。 不知道这是否有很大的不同?
iMac:test_solar dave$ git branch -r
origin/HEAD -> origin/master
origin/daves_branch
origin/discover
origin/master
git fetch origin discover
git checkout discover
这是我跑的命令。 但绝对不行。 我希望能够检出该分支,然后推送并恢复来自各个协作者或工作站的分支更改。
您需要创建一个跟踪远程分支的本地分支。 以下命令将创建一个名为daves_branch的本地分支,用于跟踪远程分支源/ daves_branch 。 当你推动你的改变时,远程分支将被更新。
对于大多数版本的git:
git checkout --track origin/daves_branch
--track
是git checkout -b [branch] [remotename]/[branch]
缩写git checkout -b [branch] [remotename]/[branch]
其中[remotename]是本例中的起源 ,[branch]是两次相同的daves_branch 。
对于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
选项。 全部细节在这里:http://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Tracking-Branches
我使用了fetch
然后是checkout
...
git fetch <remote> <rbranch>:<lbranch>
git checkout <lbranch>
...其中<rbranch>
是远程分支或源代码, <lbranch>
是您要跟踪的尚不存在的本地分支或目标引用,以及您可能想要将其命名为远程分支或源代码引用。 这在<refspec>
的解释中的选项下进行了解释。
Git非常聪明,如果我在远程分支的前几个字母后面标签,它会自动完成第一条命令。 IE:我甚至不需要命名本地分支,Git自动为我复制远程分支的名称。 谢谢Git!
同样在这篇相似的SO文章中的答案显示,如果您没有在fetch
命名本地分支,那么当您使用-b
标志签出时仍然可以创建它。 IE: git fetch <remote> <branch>
后跟git checkout -b <branch> <remote>/<branch>
与我的初始答案完全一样。 显然,如果您的回购只有一个远程,那么您可以在fetch
后执行git checkout <branch>
,它将为您创建一个本地分支。 EG:您刚刚克隆了一个回购协议,并希望查看远程的其他分支。
我认为,对于一些文件的fetch
可能已经从逐字抄pull
。 特别是选项中的<refspec>
部分是相同的。 然而,我不相信fetch
会merge
,所以如果你离开冒号的目标端,空的fetch
应该什么也不做 。
注意: git fetch <remote> <refspec>
是短期的git fetch <remote> <refspec>:
因此它会做什么,但git fetch <remote> <tag>
相同git fetch <remote> <tag>:<tag>
应该在本地复制远程<tag>
。
我想这只有在你想在本地复制一个远程分支时才有用,但不一定马上检查它。 否则,我现在将使用上面所接受的答案,这在结帐说明的第一部分中详细解释,后面在--track
的解释下的选项部分中详细解释,因为它是--track
的。 那么...有点像1班,因为你仍然必须首先运行git fetch <remote>
。
仅供参考: <refspecs>
(source:destination)的顺序解释了用于删除远程分支的奇怪的Git-1.7前方法。 IE:将任何东西都压入目的地refspec。
如果您试图“签出”一个新的远程分支(只存在于远程,但不在本地),以下是您需要的东西:
git fetch origin
git checkout --track origin/<remote_branch_name>
这假定你想从原点获取。 如果不是,请用您的远程名称替换原点。
链接地址: http://www.djcxy.com/p/671.html