如何为特定提交生成 Git 补丁?
我想为特定提交哈希
创建补丁。
我尝试使用 git format-patch
提交以来的每次提交生成补丁。有没有办法只为
生成补丁?
I want to create a patch for a specific commit hash, <rev>
.
I tried using git format-patch <rev>
, but that generated a patch for each commit since the <rev>
commit. Is there a way to generate a patch only for <rev>
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(12)
尝试:
例如:
-1
标志指示补丁中应包含多少次提交:使用以下命令应用补丁:
或者,您也可以应用(应该适用于包括 Windows 在内的所有操作系统):
-v
或--verbose
将显示失败的内容,如果任何。为您提供有关如何修复的线索。Try:
For example:
The
-1
flag indicates how many commits should be included in the patch:Apply the patch with the command:
Alternatively you can also apply (should work on all OSes including Windows) with:
The
-v
or--verbose
will show what failed, if any. Giving you a clue on how to fix.用于从最上面的生成补丁。从特定 SHA-1 哈希提交:
单个补丁文件中头部的最后 10 个补丁:
For generating the patches from the topmost <n> commits from a specific SHA-1 hash:
The last 10 patches from head in a single patch files:
假设您在提交 1 之后提交了提交 id 2,您将能够运行:
其中 2 和 1 是 SHA-1 哈希值。
Say you have commit id 2 after commit 1 you would be able to run:
where 2 and 1 are SHA-1 hashes.
此命令(正如 @Naftuli Tzvi Kay 已经建议的那样),
将
HEAD
替换为特定的哈希或范围。将生成最新提交的补丁文件,格式类似于 Unix 邮箱格式。
然后,您可以通过以下方式重新应用邮箱格式的补丁文件:
请参阅:
man git-format-patch
。This command (as suggested already by @Naftuli Tzvi Kay),
Replace
HEAD
with a specific hash or range.will generate the patch file for the latest commit formatted to resemble the Unix mailbox format.
Then you can reapply the patch file in a mailbox format by:
See:
man git-format-patch
.快速而简单的解决方案。
Fast and simple solution.
如果您想确保(单个提交)补丁将应用于特定提交之上,您可以使用新的 git 2.9(2016 年 6 月)选项
git format-patch --base
请参阅 < a href="https://github.com/git/git/commit/bb52995f3ec7fac2b282a91af4230e4f387af234" rel="noreferrer">提交 bb52995,提交 3de6651,提交 fa2ab86, 提交 ded2c09(2016 年 4 月 26 日),作者:叶小龙(``)。
(由 Junio C Hamano --
gitster
-- 合并于 提交72ce3ff,2016 年 5 月 23 日)Git 2.23(2019 年第 3 季度)将改进这一点,因为“
format-patch
”的“--base
”选项计算了patch-ids
以不稳定的方式获取必备补丁,已更新为以与“git patch-id --stable
”兼容的方式进行计算。请参阅提交a8f6855,提交 6f93d26(2019 年 4 月 26 日),作者:斯蒂芬·博伊德(
akshayka
)。(由 Junio C Hamano --
gitster
-- 合并于 提交8202d12,2019 年 6 月 13 日)在 Git 2.24(2019 年第 4 季度)之前,“
git format-patch -o” 相当于“
mkdir”,而不是“
” mkdir -p
”,正在更正。请参阅 提交 edefc31(2019 年 10 月 11 日),作者:伯特·韦萨尔格(
bertwesarg
)。(由 Junio C Hamano --
gitster
-- 合并于 提交f1afbb0,2019 年 10 月 18 日)在 Git 2.25(2020 年第 1 季度)中,设置
format.useAutoBase
配置变量时“git rebase
”无法正常工作,该问题已得到纠正。请参阅提交cae0bc0,提交 945dc55, 提交 700e006, 提交 a749d01, 提交 0c47e06(2019 年 12 月 4 日),作者:刘丹顿(
Denton-L
)。(由 Junio C Hamano --
gitster
-- 合并于 提交71a7de7,2019 年 12 月 16 日)使用 Git 2.29(2020 年第 4 季度),“
git格式补丁
“(man ) 学习将“whenAble
”作为format.useAutoBase
配置变量的可能值,以便在自动计算的基数没有意义时变为无操作。请参阅 提交 7efba5f(2020 年 10 月 1 日),作者:雅各布·凯勒(
雅各布-凯勒
)。(由 Junio C Hamano --
gitster
-- 合并于 提交5f8c70a,2020 年 10 月 5 日)git config
现在包含在其对于 Git 2.30(2021 年第一季度),“
git格式补丁--output=there
"(man) 没有按预期工作,而是崩溃了。请参阅提交dc1672d,提交 1e1693b, 提交 4c6f781(2020 年 11 月 4 日),作者:杰夫·金(
peff
)。(由 Junio C Hamano --
gitster
-- 合并于 提交5edc8bd,2020 年 11 月 18 日)If you want to be sure the (single commit) patch will be applied on top of a specific commit, you can use the new git 2.9 (June 2016) option
git format-patch --base
See commit bb52995, commit 3de6651, commit fa2ab86, commit ded2c09 (26 Apr 2016) by Xiaolong Ye (``).
(Merged by Junio C Hamano --
gitster
-- in commit 72ce3ff, 23 May 2016)Git 2.23 (Q3 2019) will improve that, because the "
--base
" option of "format-patch
" computed thepatch-ids
for prerequisite patches in an unstable way, which has been updated to compute in a way that is compatible with "git patch-id --stable
".See commit a8f6855, commit 6f93d26 (26 Apr 2019) by Stephen Boyd (
akshayka
).(Merged by Junio C Hamano --
gitster
-- in commit 8202d12, 13 Jun 2019)Before Git 2.24 (Q4 2019), "
git format-patch -o <outdir>
" did an equivalent of "mkdir <outdir>
" not "mkdir -p <outdir>
", which is being corrected.See commit edefc31 (11 Oct 2019) by Bert Wesarg (
bertwesarg
).(Merged by Junio C Hamano --
gitster
-- in commit f1afbb0, 18 Oct 2019)With Git 2.25 (Q1 2020), "
git rebase
" did not work well whenformat.useAutoBase
configuration variable is set, which has been corrected.See commit cae0bc0, commit 945dc55, commit 700e006, commit a749d01, commit 0c47e06 (04 Dec 2019) by Denton Liu (
Denton-L
).(Merged by Junio C Hamano --
gitster
-- in commit 71a7de7, 16 Dec 2019)With Git 2.29 (Q4 2020), "
git format-patch
"(man) learns to take "whenAble
" as a possible value for theformat.useAutoBase
configuration variable to become no-op when the automatically computed base does not make sense.See commit 7efba5f (01 Oct 2020) by Jacob Keller (
jacob-keller
).(Merged by Junio C Hamano --
gitster
-- in commit 5f8c70a, 05 Oct 2020)git config
now includes in its man page:With Git 2.30 (Q1 2021), "
git format-patch --output=there
"(man) did not work as expected and instead crashed.See commit dc1672d, commit 1e1693b, commit 4c6f781 (04 Nov 2020) by Jeff King (
peff
).(Merged by Junio C Hamano --
gitster
-- in commit 5edc8bd, 18 Nov 2020)使用 commit-id 创建 git 补丁
此命令创建具有以下文件名的补丁
要应用补丁:
Create a git patch using commit-id
This command create patch with following file name
To apply the patch:
要从特定提交(不是最后一次提交)生成补丁:
To generate a patch from a specific commit (not the last commit):
凭借我的 Mercurial 背景,我将使用:
但我正在考虑使用
git 格式-patch -1 $ID 现在。
With my Mercurial background I was going to use:
But I am considering using
git format-patch -1 $ID
now.如果你只想比较指定的文件,你可以使用:
If you just want diff the specified file, you can use:
仅针对特定 SHA-1 值生成补丁的方法是什么?
这很简单:
选项 1.
git show commitID > myFile.patch
选项 2.
git commitID~1..commitID > myFile.patch
注意:将
commitID
替换为实际提交 ID(SHA-1 提交代码)。What is the way to generate a patch only for the specific SHA-1 value?
It's quite simple:
Option 1.
git show commitID > myFile.patch
Option 2.
git commitID~1..commitID > myFile.patch
Note: Replace
commitID
with the actual commit id (SHA-1 commit code).我也在为同样的问题而苦苦挣扎。
这是我发现的
I was also struggling with the same question.
Here is what I found out