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

Git 如何为特定的提交记录生成补丁?

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

6个答案

1
2
3
4
5
6

要为特定的 Git 提交生成补丁,你可以使用 git format-patch 命令。以下是一些常见的用法:

  1. 生成最近的一个提交的补丁:

    sh
    git format-patch -1

    -1 指的是最近的一个提交(HEAD)。这将会生成一个以提交哈希开始,后面跟着提交信息的.patch文件。

  2. 生成特定提交的补丁:

    首先,你需要知道提交的哈希值。可以使用 git log 查看提交历史并找到你想要生成补丁的特定提交的哈希值。然后使用:

    sh
    git format-patch -1 <commit-hash>

    替换 <commit-hash> 为实际的提交哈希值。

  3. 生成一系列提交的补丁:

    如果你想要生成一系列提交(比如说,从某个特定的提交开始到最新的提交),你可以这样做:

    sh
    git format-patch <commit-hash>^..

    这里 <commit-hash> 是序列中第一个提交的哈希值,^ 表示该提交的父提交,两个点 .. 表示到当前分支的最新提交。

  4. 生成一个范围内所有提交的补丁:

    如果你想要获取两个提交之间的所有补丁,可以使用:

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

    这会为从 <start-commit-hash><end-commit-hash> (不包含 <start-commit-hash>)之间的每一个提交生成一个补丁文件。

每个生成的补丁文件将包含一个单独提交的完整内容,这些文件可以应用到另一个仓库中,或者用于代码审查和其他目的。这些文件通常是以邮件的形式发送给其他开发者或者通过某些项目管理工具来共享。

2024年6月29日 12:07 回复

尝试:

shell
git format-patch -<n> <rev>

例如:

shell
git format-patch -1 HEAD

-1标志指示补丁中应包含多少提交:

-

     从最上面的 次提交中准备补丁。


使用以下命令应用补丁:

shell
git am < file.patch

或者,您也可以通过以下方式申请(应该适用于包括 Windows 在内的所有操作系统):

shell
git apply --verbose file.patch

或将显示失败的内容(如果有)-v--verbose为您提供有关如何修复的线索。

2024年6月29日 12:07 回复

用于从特定 SHA-1 哈希的最顶层 提交生成补丁:

shell
git format-patch -<n> <SHA-1> --stdout > <name_of_patch_file>.patch

单个补丁文件中头部的最后 10 个补丁:

shell
git format-patch -10 HEAD --stdout > 0001-last-10-commits.patch
2024年6月29日 12:07 回复

假设您在提交 1 之后提交了提交 ID 2,您可以运行:

shell
git diff 2 1 > mypatch.diff

其中 2 和 1 是 SHA-1 哈希值。

2024年6月29日 12:07 回复

这个命令(正如@ Naftuli Tzvi Kay已经建议的那样),

shell
git format-patch -1 HEAD

替换HEAD为特定的哈希或范围。

将为最新提交生成补丁文件,其格式类似于 Unix 邮箱格式。

-<n>- 从最上面的 次提交中准备补丁。

然后您可以通过以下方式以邮箱格式重新应用补丁文件:

shell
git am -3k 001*.patch

看:man git-format-patch

2024年6月29日 12:07 回复

git format-patch commit_Id~1..commit_Id
git apply patch-file-name

快速而简单的解决方案。

2024年6月29日 12:07 回复

你的答案