为特定的提交生成一个git补丁

我需要编写一个脚本来为SHA1提交编号列表创建补丁。

我尝试使用git format-patch <the SHA1> ,但是自SHA1以来,每次提交都会生成一个补丁。 生成几百个补丁后,我不得不终止该过程。

有没有一种方法只能为特定的SHA1生成补丁?


#1楼

为了从特定sha1哈希的最高提交生成补丁:

git format-patch -<n> <SHA1>

从头开始的最后10个补丁在一个补丁文件中:

git format-patch -10 HEAD --stdout > 0001-last-10-commits.patch

#2楼

要从特定提交(而不是最后一次提交)生成路径:

git format-patch -M -C COMMIT_VALUE~1..COMMIT_VALUE

#3楼

如果您想确保(单次提交)修补程序将应用于特定的提交,则可以使用新的git 2.9(2016年6月)选项git format-patch --base

git format-patch --base=COMMIT_VALUE~ -M -C COMMIT_VALUE~..COMMIT_VALUE

# or
git format-patch --base=auto -M -C COMMIT_VALUE~..COMMIT_VALUE

# or
git config format.useAutoBase true
git format-patch -M -C COMMIT_VALUE~..COMMIT_VALUE

请参见Xiaolong Ye(``)的 commit bb52995commit 3de6651commit fa2ab86commit ded2c09 (2016年4月26日
(由Junio C gitster - gitstercommit 72ce3ff中合并 ,2016年5月23日)

format-patch :添加' --base '选项以记录基础树信息

维护人员或第三方测试人员可能想知道补丁程序系列适用的确切基础树。 教git format-patch一个' --base '选项来记录基础树信息,并将其附加在第一条消息的末尾(求职信或系列中的第一个补丁)。

基础树信息由“基础提交”(这是众所周知的提交,它是其他所有人都在其中进行工作的项目历史的稳定部分的一部分)组成,并且包含零个或多个“先决条件补丁”(众所周知)尚不属于“基本提交”的飞行中补丁,需要先以拓扑顺序在“基本提交”之上应用,然后才能应用补丁。

“基本提交”显示为“ base-commit: ”,后跟提交对象名称的40进制。
“先决条件补丁”显示为“ prerequisite-patch-id: ”,后跟40个十六进制的“补丁ID”,可以通过将补丁通过“ git patch-id --stable ”命令来获得。


Git 2.23(2019年第三季度)将对此进行改进,因为“ format-patch ”的“ --base ”选项以一种不稳定的方式计算了必备补丁的patch-ids ,该更新已更新为与“ git patch-id --stable ”。

参见Stephen Boyd( akshayka )的 commit a8f6855commit 6f93d26 (2019年4月26日
(由Junio C gitster - gitstercommit 8202d12中合并 ,2019年6月13日)

format-patch :使--base patch-id输出稳定

每次处理diff.c中的patch-id生成代码中的diff.c ,我们并没有刷新上下文,但是当我们使用' patch-id '工具生成“稳定的” patch-id时,我们就是这样做的。

让我们将类似的逻辑从patch-id.cdiff.c以便在为命令调用的format-patch --base=类型生成patch-id时获得相同的哈希值。


在Git 2.24(2019年第四季度)之前,“ git format-patch -o <outdir> ”等效于“ mkdir <outdir> ”而不是“ mkdir -p <outdir> ”,该问题已得到纠正。

请参阅Bert Wesarg( bertwesarg )的 commit edefc31 (2019年10月11日
(由Junio C gitster - gitstercommit f1afbb0中合并 ,2019年10月18日)

format-patch :创建输出目录的主要组件

签名人:Bert Wesarg

'git format-patch -o'等效于'mkdir'而不是'mkdir -p',正在纠正。

避免在前导目录上使用“ adjust_shared_perm ”,这可能会带来安全隐患。 通过像git init一样暂时禁用config.sharedRepository来实现。


#4楼

此命令(如@ Naftuli Tzvi Kay所建议):

git format-patch -1 HEAD

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

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

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

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

git am -3k 001*.patch

请参阅: man git-format-patch


#5楼

仅针对特定SHA1生成补丁的方法是什么?

很简单:

选项1. git show commitID > myFile.patch

选项2. git commitID~1..commitID > myFile.patch

注意:用实际的提交ID(SHA1提交代码)替换commitID


#6楼

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

快速简单的解决方案。


#7楼

如果只需要diff指定的文件,则可以:

git diff master 766eceb-连接/> 000-mysql-connector.patch


#8楼

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

git diff 2 1 > mypatch.diff

其中2和1是SHA哈希。


#9楼

尝试:

git format-patch -1 <sha>

要么

git format-patch -1 HEAD

根据上面的文档链接, -1标志告诉git补丁中应该包含多少个提交;

-<n>

从最顶层的提交准备补丁。


使用以下命令应用补丁:

git am < file.patch
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值