题 Git获取远程分支


我的同事和我在同一个存储库上工作,我们已经将它分成两个分支,每个分支在技术上用于不同的项目,但它们有相似之处,因此我们有时会想要从分支机构返回给* master。

但是,我有分支机构。我的问题是,我的同事怎么能专门拉那个分支?一个 git clone repo似乎并没有为他本地创建分支,虽然我可以看到他们在推动我的结束后生活在一起。

此外,当我最初创建分支时,我做了 -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

这些是我运行的命令。但它绝对不起作用。我希望能够检查该分支,然后推送并提交来自各个协作者或工作站的分支更改。


1602
2018-03-02 17:06


起源


可能重复 git checkout远程分支 - Andrew Marshall
我用了: git fetch --all,然后查看所有分支: git branch,然后我结帐分支: git checkout nameofnewbranch - Jeff Mattson
检查你的问题 https://stackoverflow.com/questions/1072261/push-and-pull-branches-in-git/47780374#47780374 - Rizo


答案:


您需要创建一个跟踪远程分支的本地分支。以下命令将创建一个名为的本地分支 daves_branch,跟踪远程分支 产地/ daves_branch。推送更改时,将更新远程分支。

对于大多数版本的git:

git checkout --track origin/daves_branch

--track 是简写 git checkout -b [branch] [remotename]/[branch] [remotename]的地方 起源 在这种情况下和[分支]是两倍相同, 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


2225
2018-03-02 17:45



“git fetch”以确保使用远程引用更新您的repo并且“git checkout --track origin / discover”应该足够了。然后你可以提交那个分支和一个“git push”来同步你的更改遥控器。 - ralphtheninja
我试过这个并且“致命:git checkout:更新路径与切换分支不兼容。你打算检查'上游/开发'哪个无法解决为提交?”。难道我做错了什么? - Neil Barnwell
看起来git 1.5.6.5需要这个:git checkout --track -b origin / daves_branch - Charlie
这给我带来了麻烦,它创建了一个名为origin / <branch>的本地分支,现在对远程分支origin / <branch>不明确,我不知道如何摆脱疯狂的本地分支! - Alan Moore
您需要显式添加本地分支名称,否则git会创建一个带有完整分支路径的新本地分支,如上所述的@AlanMoore和@ derekmx271: git checkout -b --track daves_branch origin/daves_branch - Mike Scott


我用过 fetch 其次是 checkout ...

git fetch <remote> <rbranch>:<lbranch> 
git checkout <lbranch>

......在哪里 <rbranch> 是远程分支或 来源参考 和 <lbranch> 到现在为止 不存在的 当地分公司或 目的地参考 您想要跟踪以及您可能想要命名与远程分支或源ref相同的名称。这在下面解释 选项 在解释中 <refspec>

Git是如此聪明,如果我自动完成第一个命令 标签 在远程分支的前几个字母之后。 IE:我甚至不必命名本地分支,Git会自动为我复制远程分支的名称。谢谢Git!

也作为 在这个类似的SO帖子的答案 如果您没有在本地分支中命名,则显示 fetch,当你通过使用它来检查它时,你仍然可以创建它 -b 旗。 IE:  git fetch <remote> <branch> 其次是 git checkout -b <branch> <remote>/<branch> 与我最初的答案完全一样。如果你的回购有明显的话 只有一个 远程,然后你可以做 git checkout <branch> 后 fetch 它会为你创建一个本地分支。 例如: 你刚刚克隆了一个仓库,想要从遥控器上查看额外的分支。

我相信一些文档 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,因为它是一个1班轮。 好... 有点像1班轮,因为你会的 仍然 必须跑 git fetch <remote> 第一。

仅供参考:的顺序 <refspecs> (来源:目的地)解释了奇怪的前Git-1.7方法 删除远程分支。 IE:不推送任何内容到目的地refspec。


744
2018-04-19 00:45



您假设Git自动完成已设置。 code-worrier.com/blog/autocomplete-git - antonagestam
这有助于我将远程代码放入本地分支。然而,它没有让我的本地分支跟踪远程分支。 - Aknosis
这对我有用,接受的答案没有。 - Parthian Shot
因为某些原因, git fetch remote branch 我没有为我添加一个分支头,虽然所有的引用都被取了,所以当我尝试按照接受的答案中的步骤时,我得到的错误是 pathspec did not match any file(s) known to git.,但是 rbranch:lbranch 方法有效。有趣的是,它还获取了所有以相同前缀开头的标记,就像它是一个通配符(rbranch*)。 - haridsv
Nit:git没有自动完成,正是这样做的bash shell。 - legalize


如果您正在尝试“签出”新的远程分支(仅存在于远程分支,但不存在于本地),这就是您需要的:

git fetch origin
git checkout --track origin/<remote_branch_name>

这假设你想要从中获取 起源。如果没有,请更换 起源 由你的 远程 名称。


270
2018-05-17 12:14



从原点“拉”是令人困惑的语言,最好将上面的评论更改为从原点“获取”。 Pull是一个执行获取和合并的命令,这肯定会让新手感到困惑(包括我) - Davos
为我工作!现在将它添加到我的笔记中:)谢谢你! - hmd
为我工作,我没有拿到正确的远程分支,所以接受的答案一直让我失望,带着令人困惑的信息。 +1 - Nathan Hinchey
简单而甜蜜,我敢肯定大多数用户只是想在第一时间做这个操作。 - vikramvi
这就是我一直在寻找的东西!谢谢@paneer_tikka - Kris Randall


检查远程存在而不是本地存在的myBranch - 这对我有用:

git fetch --all
git checkout myBranch

我收到了这条消息:

Branch myBranch set up to track remote branch myBranch from origin
Switched to a new branch 'myBranch'

88
2017-11-12 03:36



换句话说,你不必写 -t? - Andrew Samuelsen
我认为这个答案有误。我最初没有做过命令 -t 得到了 You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. 因为没有同名的本地分支。我不得不重新参加比赛 -t 修理。 - stanri
这对我很有用 - 我的同事添加了一个新的远程分支,我想添加到我的本地仓库。我一直在抓,但没有看到新的分支出现在当地。没意识到我可以跑 checkout为它创造它。谢谢! - skwidbreth
取决于git版本。最新版本,如其他地方所述,只需要git checkout <原点上的分支名称>。小心翼翼地使用同名的本地人与远程的分支 - 他们会把东西弄得乱七八糟 - leRobot


使用 git branch -a (本地和远程分支机构)或 git branch -r (只有远程分支)才能看到所有遥控器及其分支。然后你可以做一个 git checkout -t remotes/repo/branch 到远程并创建一个本地分支。

还有一个git ls-remote命令可以查看该远程的所有引用和标记。


37
2018-03-02 17:16



git checkout remotes/repo/branch 使git checkout查找pathspec,而不是远程repo。 - Erin
是的,甚至可以检查远程仓库上的分支机构吗?显然(或者可能不是那么明显),首先获取遥控器,以便在本地获得它们。 git书有一个很好的部分: git-scm.com/book/en/Git-Branching-Remote-Branches - Daniel Lee


标题和问题混淆了:

  • Git获取远程分支
  • 我的同事怎么能专门拉那个分支呢。

如果问题是我如何获得远程分支以及如何git checkout远程分支,更简单的解决方案是:

使用git(> = 1.6.6),您可以使用:

git checkout <branch_name>

如果在当地 <branch_name> 找不到但是在一个具有匹配名称的遥控器中确实存在跟踪分支,视为等效于:

git checkout -b <branch_name> --track <remote>/<branch_name>

请参阅git checkout的文档

为你的朋友:

$ git checkout discover
Branch discover set up to track remote branch discover
Switched to a new branch 'discover'

33
2018-03-31 10:48



谢谢纪尧姆!我刚刚使用了这个命令并写了一篇关于它的帖子来描述我的确切案例: leniel.net/2014/05/... - Leniel Maccaferri
<! - git checkout <remote-branch-name> - >按预期工作,谢谢Guillaume! - Sachidananda Naik


git checkout -b serverfix origin/serverfix

这是一个很常见的操作,git提供了--track简写:

git checkout --track origin/serverfix

事实上,这种情况非常普遍,甚至还有一条捷径。如果您尝试签出的分支名称(a)不存在,并且(b)只与一个遥控器上的名称完全匹配,Git将为您创建跟踪分支:

git checkout serverfix

要设置名称与远程分支不同的本地分支,可以轻松地使用具有不同本地分支名称的第一个版本:

git checkout -b sf origin/serverfix

现在,您的本地分支sf将自动从origin / serverfix中提取。

资源: Pro Git第二版,由Scott Chacon和Ben Straub撰写(为便于阅读而削减)


24
2018-03-18 00:21



作品!谢谢! - Karl Pokus


git fetch

git branch -r

git checkout <branch_name>

12
2017-12-04 20:53