跳至主要内容

Git 克隆分支:逐步教程

要克隆特定分支,请使用命令 git clone --single-branch --branch ,将 替换为目标分支名称,将 替换为仓库的 URL。

使用 AI 探索

想象您在写一本书,想尝试一些新点子,但又不想弄乱原稿。您可以为每个想法开一本新笔记本,把不同的草稿分开保存。

Git 是一种版本控制系统,允许软件开发者通过“分支”以相同方式管理代码。每个分支就像一条独立的开发路径,您可以在不影响主代码库的情况下探索更改。

通过书本类比解释 Git 克隆分支

在本文中,我将带您使用 git clone,重点介绍如何克隆特定分支。若想进一步学习 Git,推荐这门 Introduction to Git 课程。

我们先给赶时间的读者一个简短答案,然后再展开细节。

简短答案:如何克隆特定分支

要从 Git 仓库克隆特定分支,请使用以下命令:

git clone --single-branch --branch <branch_name> <repository_url>

将 <branch_name> 替换为目标分支名称,将 <repository_url> 替换为仓库的 URL。该命令会在本地创建该分支的副本,使您可以立刻在该分支上专注开发。

示例

在整篇文章中,我们将使用这个仓库。您可以用它在自己的机器上练习本文提到的命令。该仓库包含三个分支:

  1. main:默认分支,包含两个文本文件。
  2. add-new-file:新增了第三个文件的分支。
  3. modify-file:修改了第二个文件的分支。

以下是克隆 add-new-file 分支的方法:

git clone --single-branch --branch add-new-file https://github.com/fran-aubry/git-clone-example.git

什么是 git clone?

默认情况下,git clone 会将整个仓库复制到您本地机器的新目录中,克隆所有分支。其语法如下:

git clone <repository_url>

要克隆示例仓库,我们可以执行:

git clone https://github.com/fran-aubry/git-clone-example.git

执行该命令后,所有分支都会被复制到您的本地。但同一时间只有一个分支的文件可见,这个分支被称为已检出分支。克隆仓库后,默认分支(通常为 main 或 master)会被检出。

git clone 默认检出分支

切换分支

完成完整克隆后,我们可以使用 git checkout 命令切换(检出)到目标分支。比如要检出 modify-file 分支,我们可以这样做:

git checkout modify-file

git 检出分支

克隆深度

在使用 Git 时,对分支的更改通过 git commit 命令进行提交来保存。每次提交都会为该分支创建一个新状态,必要时您可以回退到该状态。可以把每次提交看作一张快照,Git 会记录所有这些快照,您可以随时将分支回退到任意快照。

不带任何选项的 git clone 会将每个分支的所有提交都下载到您的本地。根据项目大小,这可能占用本地存储的较大空间。如果您确定不需要完整历史,可以使用 --depth 参数来指定要克隆的提交数量(或快照数)。

若只加载最新一次提交来克隆主分支,请使用以下命令:

git clone --depth=1 https://github.com/fran-aubry/git-clone-example.git

克隆特定分支

我们已经学习了如何使用 git clone 克隆仓库。默认情况下,该命令会将所有内容克隆到本地。很多时候,您只关心某个特定分支,此时只克隆该分支更高效。这样既能节省磁盘空间,又能在克隆后无需切换分支即可立刻开始工作。

延续写书的类比:假设您被指派重写书籍的第二章,那么您只需克隆执行该任务的分支,无需访问其他章节修订相关的分支。

您可以通过添加 --single-branch 和 --branch 参数并跟上分支名,指示 Git 只克隆单个分支:

git clone --single-branch --branch <branch_name> <repository_url>

我们来逐一解释该命令:

  • git clone:用于将远程仓库复制到本地的基础 Git 命令。
  • --single-branch:告知 Git 只克隆单个分支。如果未指定分支,则会克隆默认分支。
  • --branch <branch_name>:指定要克隆的分支。这里的 <branch_name> 是您想要克隆的分支名称。
  • <repository_url>:仓库的 URL。

例如,仅克隆我们仓库的 modify-file 分支,可执行:

git clone --single-branch --branch add-new-file https://github.com/fran-aubry/git-clone-example.git

如何使用已克隆的分支

在分支上工作时,您需要进行三项基本操作:

  1. 通过创建当前状态的快照来保存当前工作。
  2. 上传您的更改,让所有人都可以访问。
  3. 下载他人的更改,并与您的更改合并。

使用 git commit 保存更改

在 Git 中,保存工作称为创建一次提交(commit)。这个过程会为您正在处理的分支创建当前状态的快照。

提交后,分支状态会保存在您的本地机器上,便于在不同进度阶段之间切换。

Git 分支上的提交示意图

在 Git 中提交更改,使用 git commit 命令。不过,在提交之前,Git 需要知道要将哪些文件包含在本次提交中。您需要用 git add 命令指定要保存的文件。其语法如下:

git add <path_to_file>

其中 <path_to_file> 是您想提交的文件路径。举例来说,如果我们在示例仓库的 modify-file 分支上,为 file2.txt 新增了一段文字,您可以通过执行:

git add file2.txt

在将需要包含在提交中的所有文件添加完成后,执行以下命令进行提交:

git commit -m <message>

这里的 <message> 参数应是用双引号括起的简短信息,概述本次更改。例如:

git commit -m "Add paragraph"

以下是提交消息的一些约定。它们对于确保项目中所有成员的理解与沟通非常重要:

  • 使用祈使语气: 提交消息以动词原形开头(例如 “Add”、“Fix”、“Update”)。例如,不要写 “Added new feature”,而写 “Add new feature”。
  • 简洁且具描述性: 力求简短,最好不超过 50 个字符,但要优先保证对更改的清晰描述。不要写 “Changed stuff”,而写 “Update styling for navigation bar”。
  • 避免泛泛而谈: 避免诸如 “Fix bugs” 或 “Make improvements” 这样含糊的消息;要具体一些,如 “Fix bug in login form validation” 或 “Improve readability of documentation”。

使用 git push 上传更改

提交会在您的本地机器上创建更改的快照。若要让他人访问您的更改,需要将其上传。为此,请使用 push 命令。

Git 中 push 命令的基本语法为:

git push <remote> <branch>

解释如下:

  • <remote>:要推送至的远程仓库名称。默认情况下,克隆仓库后远程仓库名为 origin。
  • <branch>:要推送到远程仓库的分支名称。如果省略该参数,Git 会根据当前分支和远程跟踪配置执行推送。

以下是一些常见的 git push 用法:

  • 推送当前分支的更改:git push
  • 推送特定分支的更改:git push origin <branch>

使用 git pull 下载更改

Git 使大型团队能够并行协作于同一项目。当同事修改了您也在处理的分支时,您的本地分支可能会落后于远程分支。

要下载他人的提交,我们使用 git pull 命令。Git 中 pull 命令的基本语法为:

git pull <remote> <branch>

各参数含义如下:

  • <remote>:要拉取自的远程仓库名称。默认名称为 origin。
  • <branch>:要拉取更改的分支名称。若未指定,Git 会使用当前分支及其上游分支。

以下是一些常见的 git pull 用法:

  • 拉取当前分支的更改:git pull
  • 拉取特定分支的更改:git pull origin <branch>

提交-拉取-推送的工作流

使用 Git 时,我建议频繁拉取更新,确保您的本地分支保持最新。建议遵循以下最佳实践:

  • 开始工作前,先为当前分支拉取最新更新,确保在最新版本上进行开发。
  • 经常提交,每次提交聚焦于小而逻辑相关的更改。
  • 进行一些更改并完成一次提交后,再次拉取以更新分支,防止与他人并行更改产生偏差。
  • 最后,将您的更改推送到远程仓库。

Git 工作流

Git 冲突

当执行 git pull 命令从远程仓库下载更改时,可能会遇到其他提交修改了与您本地提交相同的行。Git 会尝试自动合并更改,在许多情况下可以成功。例如,如果对同一文件的不同部分进行了修改,Git 能够无缝合并,因为提交影响的是不同区域。

但如果您和其他贡献者修改了同一段文字,Git 将无法判断保留哪个版本,从而产生合并冲突。此时,您需要手动解决冲突,决定保留哪些更改。

若需更多解决冲突的指导,建议阅读这篇文章:如何解决 Git 中的合并冲突。

从 GitHub 下载

在某些情况下,您只想在本地保存仓库副本以供使用,并不打算修改它。如果这是一个公共仓库,您无需在本地安装 Git。可以直接在 GitHub 上点击 Code 按钮,然后点击 Download Zip 按钮进行下载,如下图所示:

从 GitHub 下载的示例

结论

Git 克隆可以将 Git 仓库复制到本地,使您能够使用代码或在其基础上扩展新功能。克隆仓库时会下载所有分支,这可能会占用大量磁盘空间。

分支用于处理特定更改或功能。只克隆特定分支可以让您仅针对相关更改进行贡献,而无需下载无关内容,从而显著减少磁盘占用,保持本地更清爽。

如果您想进一步学习该主题,推荐这篇 GitHub 和 Git 初学者教程。

François Aubry

作者

François Aubry

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

主题