跳至主要内容

Git 检出远程分支:分步指南

要在 Git 中检出远程分支,您需要先从远程仓库获取最新更改,然后使用它的全名(例如,origin/branch-name)在本地检出该远程分支。
· 4分钟 阅读

使用 AI 探索

当我们需要在远程仓库的某个分支上工作(例如同事的工作分支或一个新的功能分支)时,面临的挑战是在本地访问并更新该分支。

幸运的是,Git 通过一些简单明了的命令,能帮助我们创建远程分支的本地副本。这样我们就可以切换到所需分支,进行贡献,并高效地与团队协作。

快速答案:要检出名为 <branch_name> 的分支,我们运行:

git fetch origin <branch_name>
git checkout -b <branch_name> origin/<branch_name>

在本文中,我们将更深入地探讨这些命令并了解其工作原理。

两步流程:git fetch 和 git checkout

要在本地开始处理远程分支,首先需要确保本地仓库与远程仓库保持同步。然后,我们就可以创建一个本地副本并在该分支上开始工作。

更新本地仓库

要更新本地仓库,我们使用 git fetch 命令。它最简单的形式不带任何参数:

git fetch

当不带参数使用时,git fetch 会从默认远程仓库检索所有分支。虽然其中包括我们想要的分支,但这也会占用更多本地磁盘空间。

如果磁盘空间有限,我们可以在命令中传入分支名,仅获取所需分支:

git fetch origin <branch_name>

将 <branch_name> 替换为目标分支的名称。参数 origin 指定远程仓库的名称。默认情况下,当我们克隆一个仓库时,远程名为 origin。

需要注意的是,使用 fetch 更新远程引用不会影响任何本地文件,也不会引发冲突。在本地,有两个不同的实体:

  • 当前工作目录
  • 本地仓库

我们当前的更改和提交位于当前工作目录中。这些就是我们在计算机上打开仓库目录时看到的文件。git fetch 不会更新这些文件。只有本地仓库会被更新,它可以被理解为我们机器上远程仓库的“隐藏副本”。

检出远程分支

在拥有最新的远程仓库副本后,我们可以使用 git checkout 命令为远程分支创建本地副本:

git checkout -b <branch_name> origin/<branch_name>

将 <branch_name> 替换为目标远程分支的名称。-b 之后的第一个参数是我们希望本地分支使用的名称。通常我们会将两者命名为相同的名称,但也可以使用其他名称,只要没有同名的本地分支即可:

git checkout -b <local_branch_name> origin/<branch_name>

成功执行该命令后,Git 会将当前工作目录切换到该分支,我们就可以开始在其上工作了。

git checkout 与 git switch

自 Git 诞生以来,git checkout 命令就一直存在。它的作用不仅限于创建分支的本地副本或在分支之间切换。例如,它还能从远程仓库获取特定文件。

在较新的 Git 版本中,新增了 git switch 命令,其唯一目的就是创建远程分支的本地副本并在本地分支之间切换。

我建议使用 git switch 来替代 git checkout,因为 git checkout 的扩展能力有时会导致误用和错误。

要了解如何使用 git switch 完成本篇文章中的相同操作,您可以阅读本教程:Git Switch 分支:含实用示例的指南。

结论

在本地创建远程 Git 分支的副本对于协作至关重要。通过使用 git fetch 和 git checkout,我们可以用远程更改更新本地仓库,并切换到所需分支。

尽管经典的 git checkout 功能强大,但较新的 git switch 命令针对分支管理提供了更简洁的替代方案,从而降低错误风险。

常见问题解答

我收到错误:“please commit your changes or stash them before you switch branches.”,如何修复?

如果当前分支存在未提交更改,Git 会阻止我们切换到其他分支。解决方法是暂存当前更改或将其提交。

要提交更改,请使用以下命令:

git commit -m "Commit message"

或者,如果我们希望保留更改但暂时不提交,可以使用 git stash 命令临时保存工作进度:

git stash

之后,返回原始分支并使用 git stash pop 命令即可重新应用这些更改。

如果远程分支与本地分支同名怎么办?

Git 要求分支名称唯一。如果我们遇到提示分支已存在的错误,表示已有一个同名的本地分支。可能有两种情况:

  1. 我们之前已经检出过该分支。在这种情况下,可以直接使用命令 git checkout <branch_name> 无需 fetch 即可切换。注意我们去掉了用于创建新分支的 -b 参数。既然分支已存在,就不需要重新创建。
  2. 我们曾在某个时刻创建了另一个恰好同名的本地分支。可以通过使用不同的分支名来解决,例如 git checkout -b <different_name> origin/<branch_name>。
我可以直接修改远程分支吗?

不可以。对 Git 分支进行更改,需先像上文所述创建该分支的本地副本,然后通过提交来记录想要的更改。

如何用远程的最新更改更新我的本地分支?

要将对应远程分支的最新更改更新到我们的本地分支,通常使用 git pull 命令:

git pull origin <branch_name>

它会先执行 git fetch,再执行 git merge,以更新我们的本地分支。我们已经了解到,git fetch 会用远程的最新版本更新本地仓库,而 git merge 则将这些更改合并到本地分支。详情可参阅这篇 Git push 与 pull 教程。

我收到错误:“remote branch not found.”,如何修复?

该错误表明在我们本地的仓库副本中不存在该分支。因此可能是:

  1. 该分支确实不存在,可能是分支名拼写错误,或这是一个已被删除的旧分支。
  2. 本地仓库不是最新的。如上文所述,我们可以使用 git fetch 来更新。
François Aubry

作者

François Aubry

全栈工程师,CheapGPT 创始人。我一直热爱教学。从学生时代起,我就积极寻找机会为同学提供辅导与帮助。这份热情促使我攻读博士学位,并在此期间担任助教,以支持我的学术追求。那些年里,我在传统课堂环境中收获了极大的成就感,既建立联系也促进学习。随着在线学习平台的兴起,我也看到了数字教育的变革潜力。事实上,我曾参与我们大学一款此类平台的建设。我致力于将传统教学理念与创新的数字方法相融合。我的热情在于打造既有吸引力、信息量充足,又能让当代学习者轻松获取的课程。

主题