Git - 创建 Git 补丁文件



Git 补丁

Git 拥有许多功能,但其中一个不太为人所知但非常有用的功能是创建和应用补丁的能力。

补丁包含文件的两个版本之间的差异,使开发人员能够在存储库之间交换、推荐和实现更改。

本文将介绍在 Git 中使用补丁的基础知识,例如如何创建和使用补丁,以及它们在更改管理和团队合作方面的优势。

Git 补丁文件

Git 补丁文件是一个记录对存储库所做的更改的文档。它包含两个文件版本或一组相关文件之间的差异列表,或称为diff

此文件使开发人员能够将更改从一台机器应用到另一台机器,从而简化代码审查和合并过程。

  • Git 补丁对于在不需要中央存储库的情况下共享更新特别有用。

  • 它们还可以用于在存储库或分支之间移动更改。

  • Git 补丁源自 Unix 的patch程序,该程序曾经用于较旧的 Unix 系统中以跟踪文件差异。

创建 Git 补丁文件

使用git format-patch命令创建 Git 补丁文件。

对于在给定分支中但不在当前分支中的提交,此工具会创建补丁文件。

命令需要目标目录(保存补丁文件的目录)和分支的名称。

git format-patch <branch> <options>

在当前分支上运行git format-patch而不指定其他分支将不会有任何输出。

为特定提交创建 Git 补丁

使用git format-patch命令为单个提交创建补丁,而不是所有分支修改。

使用以下命令从最近的提交创建补丁

git format-patch HEAD~1

此命令将为当前分支中最新的提交创建一个.patch文件。

当专注于一个或两个特定提交而不是所有分支差异时,Git 补丁可以替代 cherry-pick。

使用git format-patch命令和-1选项以及提交 SHA 为特定提交创建补丁文件

git format-patch -1 <commit_sha>

此命令将为指定的提交生成一个.patch文件。

从多个提交创建 Git 补丁

要从多个提交创建补丁,请使用git format-patch命令指定提交范围。

例如,使用以下命令为最新的四个提交创建补丁

git format-patch HEAD~4

此命令将生成四个.patch文件,每个文件对应于之前的四个提交中的一个。

从特定提交范围创建 Git 补丁

使用git format-patch命令以及开始和结束提交哈希值,从特定范围的提交生成补丁。例如

git format-patch <start-commit-hash> <end-commit-hash>

此命令将为给定范围内的所有提交创建.patch文件。

应用补丁文件

在 Git 中,使用git apply命令和补丁文件名应用补丁文件

git apply <patch-file-name>

使用此命令将补丁文件中的更改应用于工作目录。

应用和提交 Git 补丁文件

以下是应用 Git 补丁文件并为其创建提交的步骤

1. 检出所需的分支:

确保我们位于应应用补丁的分支上

git checkout <branch-name>

2. 应用补丁:

使用git am命令应用补丁文件并使用与原始提交相同的邮件和元数据创建新提交

git am <patch-file-name>

3. 应用多个补丁文件:

使用git am命令,我们可以在使用时一次应用多个补丁文件。

有两种基本方法可以做到这一点

使用通配符:如果补丁文件位于同一目录中并共享文件扩展名(例如.patch),则可以使用通配符一次应用所有补丁文件

git am *.patch

此命令将应用当前目录中所有具有.patch扩展名的补丁文件。

分别列出文件:如果我们希望应用特定的补丁文件,请分别列出每个文件

git am patch1.patch patch2.patch patch3.patch

此命令将按列出的顺序应用提供的补丁文件。

这两种方法都会应用补丁文件中的更改并在当前分支中创建相应的提交。

4. 解决补丁应用期间的冲突:

如果补丁中的更改无法正确集成到分支中的当前代码中,则在使用 Git 应用补丁时可能会发生冲突。以下是解决此类冲突的方法

5. 识别冲突:

如果 Git 在应用补丁时遇到冲突,它会提醒我们。

导致冲突的文件将在工作目录中指示。

6. 解决冲突:

手动解决受影响文件中的冲突。

要修复补丁与当前代码之间的差异,请打开文件并进行必要的更改。

7. 将冲突标记为已解决:

在解决冲突后,运行以下命令来暂存已解决的文件

git add <file-with-conflicts>

8. 继续应用补丁:

在暂存已解决的文件后,使用以下命令继续补丁应用过程

git am --continue

使用此命令,指示 Git 继续应用剩余的补丁。

9. 中止补丁应用:

如果补丁应用过程变得过于复杂,或者我们选择不应用补丁,可以使用以下工具停止补丁应用过程

git am --abort

此命令将停止补丁应用并恢复在此过程中所做的任何更改,将存储库恢复到补丁应用开始之前的状态。

广告