协慌网

登录 贡献 社区

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的本地分支,跟踪远程分支origin / daves_branch 。推送更改时,将更新远程分支。

对于大多数版本的 git:

git checkout --track origin/daves_branch

--trackgit 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>是远程分支或源 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>的部分是相同的。但是,我不相信fetchmerge ,所以如果你离开冒号的目标端空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