我的同事和我在同一个存储库上工作,我们已经将它分成两个分支,每个分支在技术上用于不同的项目,但它们有相似之处,因此我们有时会想要从分支机构返回给 * 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的本地分支,跟踪远程分支origin / daves_branch 。推送更改时,将更新远程分支。
对于大多数版本的 git:
git checkout --track origin/daves_branch
--track
是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
git fetch <remote> <rbranch>:<lbranch>
git checkout <lbranch>
... 其中<rbranch>
是远程分支或源 ref , <lbranch>
是您想要跟踪的当前不存在的本地分支或目标引用 ,您可能希望将其命名为远程分支或源代码引用。这在<refspec>
的解释中的选项下进行了解释。
Git 是太聪明了它自动完成的第一个命令,如果远程分支的前几个字后,我选项卡 。 IE:我甚至不必命名本地分支,Git 会自动为我复制远程分支的名称。谢谢 Git!
同样正如此类 SO 帖子中的答案所示,如果你没有在fetch
命名本地分支,你仍然可以在使用-b
标志检出它时创建它。 IE: git fetch <remote> <branch>
后跟git checkout -b <branch> <remote>/<branch>
与我的初始答案完全一样。显然,如果您的 repo 只有一个遥控器,那么您可以在fetch
后执行git checkout <branch>
,它将为您创建一个本地分支。 EG:你刚刚克隆了一个仓库,想要从遥控器上查看额外的分支。
我相信fetch
一些文档可能已经从pull
逐字复制。特别是选项中 <refspec>
的部分是相同的。但是,我不相信fetch
会merge
,所以如果你离开冒号的目标端空fetch
应该什么都不做 。
注意: git fetch <remote> <refspec>
是git fetch <remote> <refspec>
的缩写git fetch <remote> <refspec>:
因此git fetch <remote> <tag>
与git fetch <remote> <tag>:<tag>
应该在本地复制远程<tag>
。
我想这只有在您想在本地复制远程分支时才有用,但不一定要立即检查它。否则,我现在将使用上面接受的答案 ,这将在结账说明的第一部分和后面的--track
的解释下的选项部分中详细解释,因为它是 1-liner。 嗯......有点像 1 班轮,因为你仍然需要先运行git fetch <remote>
。
仅供参考: <refspecs>
(来源:目的地)的顺序解释了删除远程分支的奇怪的前 Git-1.7 方法。 IE:不推送任何内容到目的地 refspec。
如果您正在尝试 “签出” 新的远程分支(仅存在于远程分支,但不存在于本地),这就是您需要的:
git fetch origin
git checkout --track origin/<remote_branch_name>
这假设您要从原点获取。如果没有,请用您的远程名称替换origin 。