乐闻世界logo
搜索文章和话题

Git 如何 check out 远程分支?

9 个月前提问
5 个月前修改
浏览次数61

6个答案

1
2
3
4
5
6

查看远程 Git 分支的命令很简单。你可以使用如下命令:

bash
git fetch --all git branch -r

这里是每个命令的解释:

  • git fetch --all:这个命令会从所有的远程仓库中抓取最新的数据。它会下载你本地不存在的任何数据,但不会自动合并或修改你当前的工作。

  • git branch -r:该命令会列出所有远程分支。-r 参数表示 "remote",即远程的意思。

有时候你可以仅使用 git branch -r 来查看远程分支,但如果你想确保看到的是最新的列表,最好先执行 git fetch --all。如果你只关心特定的远程仓库,可以使用 git fetch <remote> 替换 git fetch --all

此外,还有一个命令可以查看远程分支和本地分支的所有信息:

bash
git branch -a

这将显示所有本地和远程分支。在远程分支名称前通常会有一个 remotes/ 前缀。例如,remotes/origin/main 表示名为 origin 的远程仓库上的 main 分支。

2024年6月29日 12:07 回复

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

**针对 Git 2.23 进行了更新:**对于旧版本,请参阅末尾的部分。

配备一个遥控器

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

shell
$ git fetch

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

shell
$ git branch -v -a ... remotes/origin/test

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

shell
$ git switch test

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

配备多个遥控器

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

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

shell
$ git fetch origin

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

shell
$ git branch -v -a

有了远程分支,您现在需要检查您感兴趣的分支-c以创建新的本地分支:

shell
$ git switch -c test origin/test

有关使用的更多信息git switch

shell
$ man git-switch

Git 2.23 之前的版本

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

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

shell
git checkout test

如果配置了多个远程存储库,那么它会变得有点长

shell
git checkout -b test <name of remote>/test
2024年6月29日 12:07 回复

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

shell
git checkout test

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


in* (no branch)输出git branch意味着您位于未命名的分支上,处于所谓的“分离 HEAD”状态(HEAD 直接指向提交,并且不是对某些本地分支的符号引用)。如果您在此未命名分支上进行了一些提交,则始终可以在当前提交的基础上创建本地分支:

shell
git checkout -b test HEAD

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

@Dennis:,git checkout <non-branch>例如git checkout origin/test导致分离的 HEAD / 未命名分支,而git checkout testgit checkout -b test origin/test导致本地分支test(远程跟踪分支origin/test作为_上游_) – Jakub Narębski Jan 9 '14 at 8:17

强调git checkout origin/test

2024年6月29日 12:07 回复

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

shell
$ git branch test origin/test

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

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

shell
$ git checkout -b test origin/test
2024年6月29日 12:07 回复

接受的答案不适合您?

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

shell
$ git checkout -b remote_branch origin/remote_branch

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

解决方案

如果您收到此消息,则必须在运行之前首先执行git fetch origin“where is 远程存储库的名称”操作。这是带有响应的完整示例:origin``git checkout remote_branch

shell
$ 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,我们将获得远程跟踪的好处。

2024年6月29日 12:07 回复

我尝试了上面的解决方案,但没有成功。试试这个,它有效:

shell
git fetch origin 'remote_branch':'local_branch_name'

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

2024年6月29日 12:07 回复

你的答案