如何签出远程 Git 分支?

问题描述:

有人将名为 test 和 git push origin test 的分支推送到共享存储库。我可以看到带有 git branch -r 的分支。如何签出远程 test 分支?我试过了:

git checkout test,什么都不做

git checkout origin/test 给出 *(无分支)

解决方案1:

huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。

答案已根据配置的远程存储库是一个还是多个而有所不同。这样做的原因是,对于单个远程情况,一些命令可以简化,因为歧义较少。

针对 Git 2.23 更新:对于旧版本,请参阅最后的部分。

一个遥控器

在这两种情况下,首先从远程存储库获取以确保您已下载所有最新更改。

$ git fetch

这将为您获取所有远程分支。您可以通过以下方式查看可用于结帐的分支:

$ git branch -v -a

...
remotes/origin/test

以 remotes/* 开头的分支可以被认为是远程分支的只读副本。要在分支上工作,您需要从它创建一个本地分支。这是使用 Git 命令 switch(自 Git 2.23 起)通过为其指定远程分支的名称(减去远程名称)来完成的:

$ git switch test

在这种情况下,Git 猜测(可以使用 --no-guess 禁用)您正在尝试签出并跟踪具有相同名称的远程分支。

使用多个遥控器

在存在多个远程存储库的情况下,需要显式命名远程存储库。

和以前一样,首先获取最新的远程更改:

$ git fetch origin

这将为您获取所有远程分支。您可以通过以下方式查看可用于结帐的分支:

$ git branch -v -a

有了远程分支,您现在需要使用 -c 签出您感兴趣的分支,以创建一个新的本地分支:

$ git switch -c test origin/test

有关使用 git switch 的更多信息:

$ man git-switch

我还创建了下面的图像供您分享差异,看看如何获取工作,以及拉取的不同之处:

https://i.stack.imgur.com/zBb51.png

在 Git 2.23 之前

git switch 是在 Git 2.23 中添加的,在此之前 git checkout 用于切换分支。

要仅使用单个远程存储库签出:

git checkout test

如果配置了多个远程存储库,它会变得更长一些

git checkout -b test /test

对此进行扩展:git 不允许您在其他人的分支上工作。你只能自己工作。因此,如果您想添加到其他人的分支,您需要创建您自己的该分支的“副本”,这就是上面的命令所做的(好吧,它也会创建您的分支并检查它)。

如果它是一个新的远程分支,您可能需要在执行此操作之前git fetch,以便 git 知道 origin/test

...您可以使用 git fetch origin test

错误:“git checkout:更新路径与切换分支不兼容。您是否打算签出无法解析为提交的 origin/test?”

如果您有多个具有相同分支名称的遥控器,git checkout test 将无法在现代 git 中工作。它不知道该使用哪一个。

解决方案2:

保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com

旁注:使用现代 Git (>= 1.6.6),您可以只使用

git checkout test

(注意,它是 ‘test’ 而不是 ‘origin/test’)执行神奇的 DWIM-mery 并为您创建本地分支 ‘test’,上游将是远程跟踪分支 ‘origin/test’。

git branch 输出中的 * (no branch) 表示您在未命名的分支上,处于所谓的“分离 HEAD”状态(HEAD 直接指向提交,而不是对某个本地分支的符号引用)。如果你在这个未命名的分支上做了一些提交,你总是可以从当前提交创建本地分支:

git checkout -b test HEAD

评论中建议的更现代的方法:

@Dennis: git checkout ,例如 git checkout origin/test 结果在分离的 HEAD / 未命名分支中,而 git checkout test 或 git checkout -b test origin/test 结果在本地分支测试(带有远程跟踪分支起源/测试作为上游) – Jakub Narębski 2014 年 1 月 9 日在 8:17

强调git checkout origin/test

不足为奇,但是这个版本是在过去几年发布的——知道这种语法可以节省很多时间,因为仍然有很多旧的文档和评论线程在建议使用旧的方法来执行此操作。

“现代 git”——记录一下,(大约)你指的是什么版本?有时我们必须在运行旧发行版的系统上工作。

@aidan 如果你得到像 error: pathspec 'branch_name' did not match any file(s) known to git. 这样的响应,那么你应该先做一个 git fetch 。

使用 git 版本 1.8.3.msysgit.0 这对我不起作用 - 与 git 已知的任何文件都不匹配 - 我已经完成了许多 git fetches

@Dennis:git checkout ,例如 git checkout origin/test 导致分离的 HEAD / 未命名分支,而 git checkout test 或 git checkout -b test origin/test 导致本地分支 test(远程跟踪分支 origin/test 作为 upstream< /i>)

解决方案3:

huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。

在这种情况下,您可能希望创建一个本地 test 分支来跟踪远程 test 分支:

$ git branch test origin/test

在 git 的早期版本中,您需要一个明确的 --track 选项,但现在当您从远程分支分支时,这是默认选项。

要创建本地分支并切换到它,请使用:

$ git checkout -b test origin/test

这将创建一个本地分支而不切换到它。

在您上面的 bash git checkout -b test/origin/test 建议中,您希望在它前面加上一个 bash git fetch upstream 以确保您的本地存储库知道远程分支 test 在那里。否则,谢谢,一切都像宣传的那样工作。

解决方案4:

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

接受的答案对您不起作用?

虽然第一个和选定的答案在技术上是正确的,但您可能尚未从远程存储库中检索所有对象和引用。如果是这种情况,您将收到以下错误:

$ git checkout -b remote_branch origin/remote_branch

致命:git checkout:更新路径与切换分支不兼容。您是否打算签出无法解析为提交的“origin/remote_branch”?

解决方案

如果您收到此消息,则必须先执行 git fetch origin,其中 origin 是远程存储库的名称,然后才能运行 git checkout remote_branch。这是一个完整的响应示例:

$ git fetch origin
remote: Counting objects: 140, done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 69 (delta 36), reused 66 (delta 33)
Unpacking objects: 100% (69/69), done.
From https://github.com/githubuser/repo-name
   e6ef1e0..5029161  develop    -> origin/develop
 * [new branch]      demo       -> origin/demo
   d80f8d7..359eab0  master     -> origin/master

$ git checkout demo
Branch demo set up to track remote branch demo from origin.
Switched to a new branch 'demo'

如您所见,运行 git fetch origin 检索了我们尚未设置为在本地计算机上跟踪的任何远程分支。从那里开始,由于我们现在有一个远程分支的引用,我们可以简单地运行 git checkout remote_branch,我们将获得远程跟踪的好处。

谢谢! git checkout -b branch_name 为我工作。

解决方案5:

huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。

我尝试了上述解决方案,但没有奏效。试试这个,它有效:

git fetch origin 'remote_branch':'local_branch_name'

这将获取远程分支并创建一个名为 local_branch_name 的新本地分支(如果不存在)并跟踪其中的远程分支。

当 git fetch origin 或 git remote update 都没有创建本地分支时,这对我有用。我不确定为什么。

这是完成我需要的最直接的方法,即使用远程分支(不是主分支)来创建新分支。

无缝工作,尤其是在从具有多个分支的远程克隆单个分支时。

这对我也有用,接受的答案和其他高票没有。我的 git 版本是 2.5.0

有谁知道为什么这在其他一切都不起作用的情况下有效? (我在 git 2.13.0 上)

解决方案6:

huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。

这将 DWIM 用于未命名的远程源 (documentation):

$ git checkout -t remote_name/remote_branch

要添加新的遥控器,您需要先执行以下操作:

$ git remote add remote_name location_of_remote
$ git fetch remote_name

第一个告诉 Git 远程存在,第二个获取提交。

解决方案7:

保持自己快人一步,享受全网独家提供的一站式外包任务、远程工作、创意产品订阅服务–huntsbot.com

利用:

git checkout -b  /

在我的良性案例中,其他答案不适用于现代 Git。如果远程分支是新的,您可能需要先提取,但我没有检查过这种情况。

现在来看,它们确实重叠。只有我的很简洁,告诉你该做什么,而不是讲故事。因此,我认为它可能会更有用,尤其是对于当今的 git 版本。如果您认为这是一个错误的答案,您可以投反对票。

解决方案8:

huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。

您基本上看到了分支,但是您还没有本地副本!…

您需要 fetch 分支…

您可以简单地获取然后结帐到分支,使用下面的一行命令来执行此操作:

git fetch && git checkout test

我还为您创建了下面的图片来分享差异,看看 fetch 的工作原理以及它与 pull 的不同之处:

https://i.stack.imgur.com/ODFYa.png

解决方案9:

huntsbot.com – 高效赚钱,自由工作

要克隆 Git 存储库,请执行以下操作:

git clone 

上述命令检出所有分支,但只有 master 分支会被初始化。如果要检查其他分支,请执行以下操作:

git checkout -t origin/future_branch (for example)

此命令检出远程分支,您的本地分支名称将与远程分支相同。

如果您想在结帐时覆盖您的本地分支名称:

git checkout -t -b enhancement origin/future_branch

现在您的本地分支名称是 enhancement,但您的远程分支名称是 future_branch。

解决方案10:

huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。

你可以试试

git fetch remote
git checkout --track -b local_branch_name origin/branch_name

或者

git fetch
git checkout -b local_branch_name origin/branch_name

仅供参考,较新版本的 git 不再需要 --track,因为它是默认设置的,如 this earlier answer 中所述。

这个评论对我有用,谢谢! git checkout -b local_branch_name origin/branch_name

解决方案11:

huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!

对于上述所有建议,我陷入了看到 error: pathspec ‘desired-branch’ did not match any file(s) known to git. 的境地。我在 Git 版本 1.8.3.1 上。

所以这对我有用:

git fetch origin desired-branch
git checkout -b desired-branch FETCH_HEAD

后面的解释是我注意到在获取远程分支时,它被提取到了 FETCH_HEAD:

git fetch origin desired-branch

From github.com:MYTEAM/my-repo
    * branch            desired-branch -> FETCH_HEAD

尝试检查工作树中子模块中的远程分支时,我遇到了同样的问题。有谁知道这是什么原因?

原文链接:https://www.huntsbot.com/qa/1jEO/how-do-i-check-out-a-remote-git-branch?lang=zh_CN

huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入、分类等筛选,希望这些产品与实践经验能给您带来灵感。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值