Answers:
尝试:
git format-patch -1 <sha>
要么
git format-patch -1 HEAD
根据上面的文档链接,该-1
标志告诉git补丁中应包含多少个提交;
-<n>
从最顶层的提交准备补丁。
使用以下命令应用补丁:
git am < file.patch
git am --keep-cr < mypatch.patch
git format-patch -1 <sha> path/to/file.js
这将创建一个补丁仅包含的diff为file.js
为了从特定sha1哈希的最高提交生成补丁:
git format-patch -<n> <SHA1>
从头开始的最后10个补丁在一个补丁文件中:
git format-patch -10 HEAD --stdout > 0001-last-10-commits.patch
git format-patch -1 HEAD
将为最新提交生成补丁
-2
生成最近2次提交的补丁时,需要澄清的是命令got format-patch -2 HEAD
与命令行相同git format-patch HEAD~2
假设您在提交1之后拥有提交ID 2,则可以运行:
git diff 2 1 > mypatch.diff
其中2和1是SHA哈希。
git diff hash^ hash
。“ hash ^”给出优先的提交。(但是,当然,manojlds的答案更好)
git show HEAD > mypatch.diff
在提交时,应该执行相同的操作。
git diff 1 2
此命令(如@ Naftuli Tzvi Kay所建议):
git format-patch -1 HEAD
替换HEAD
为特定的哈希或范围。
会为最新提交(类似于UNIX邮箱格式)生成补丁文件。
-<n>
-从最顶层的提交准备补丁。
然后,您可以通过以下方式以邮箱格式重新应用补丁文件:
git am -3k 001*.patch
请参阅:man git-format-patch
。
git
至少在用户以正确的方式应用它的情况下,它不会比任何其他格式的补丁都多。
-k
标志(git am -3
)来修复了此表单(没有PATCH[0/10]
提交消息)。Git版本2.20.1.windows.1
如果您想确保(单次提交)修补程序将应用在特定的提交之上,则可以使用新的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(``)的提交bb52995,提交3de6651,提交fa2ab86,提交ded2c09(2016年4月26日)。
(通过合并JUNIOÇ滨野- gitster
-在提交72ce3ff 5月23日2016)
format-patch
:添加'--base
'选项以记录基础树信息维护者或第三方测试者可能想知道补丁程序系列适用的确切基础树。教git format-patch一个'
--base
'选项来记录基础树信息,并将其附加在第一条消息的末尾(求职信或系列中的第一个补丁)。基本树信息包含“基本提交”(这是众所周知的提交,它是其他所有人都在其中进行工作的项目历史的稳定部分的一部分)以及零个或多个众所周知的“必备补丁程序”尚不属于“基本提交”的飞行中的修补程序,需要先以拓扑顺序在“基本提交”之上应用,然后才能应用这些修补程序。
“基本提交”显示为“
base-commit:
”,后跟提交对象名称的40进制。
“先决条件补丁”显示为“prerequisite-patch-id:
”,后跟40进制的“补丁ID”,可以通过使补丁通过“git patch-id --stable
”命令获得。
Git 2.23(2019年第三季度)将对此进行改进,因为“ --base
”选项的“ ”选项以不稳定的方式format-patch
计算了patch-ids
必备补丁,而更新后的更新方式与“ git patch-id --stable
” 兼容。
参见Stephen Boyd()的commit a8f6855和commit 6f93d26(2019年4月26日)。(通过合并JUNIOÇ滨野- -在提交8202d12,2019年6月13日)akshayka
gitster
format-patch
:使--base patch-id
输出稳定我们并不是在每次在中处理
patch-id
生成代码中的块时都刷新上下文diff.c
,但是当我们使用'patch-id
'工具生成“稳定的”补丁ID时,我们就是在这样做。让我们将类似的逻辑从头移植
patch-id.c
进去,diff.c
以便在为“format-patch --base=
”类型的命令调用生成补丁ID时获得相同的哈希值。
在Git 2.24(2019年第四季度)之前,“ git format-patch -o <outdir>
”等效于“ mkdir <outdir>
”而非“ mkdir -p <outdir>
”,该问题已得到纠正。
请参阅Bert Wesarg()的commit edefc31(2019年10月11日)。(由Junio C Hamano合并--在commit f1afbb0中,2019年10月18日)bertwesarg
gitster
format-patch
:创建输出目录的主要组件签名人:Bert Wesarg
'git format-patch -o'等效于'mkdir'而不是'mkdir -p',正在纠正。
避免在
adjust_shared_perm
前导目录上使用“ ”,这可能会带来安全隐患。通过暂时禁用'config.sharedRepository
'like'git init
'做到。
在Git 2.25(2020年第1季度)中,设置了配置变量后,“ git rebase
”无法正常工作format.useAutoBase
,该问题已得到纠正。
请参阅Denton Liu()的commit cae0bc0,commit 945dc55,commit 700e006,commit a749d01,commit 0c47e06(2019年12月4日)。(由Junio C Hamano合并--在71a7de7号提交中,2019年12月16日)Denton-L
gitster
rebase
:修复format.useAutoBase
破损报告人:克里斯蒂安·比辛格
签名人:刘登顿使用
format.useAutoBase = true
,运行rebase会导致错误:fatal: failed to get upstream, if you want to record base commit automatically, please use git branch --set-upstream-to to track a remote branch. Or you could specify base commit by --base=<base-commit-id> manually error: git encountered an error while preparing the patches to replay these revisions: ede2467cdedc63784887b587a61c36b7850ebfac..d8f581194799ae29bf5fa72a98cbae98a1198b12 As a result, git cannot rebase them.
通过始终
--no-base
从rebase 传递给format-patch来解决此问题,以消除的影响format.useAutoBase
。
仅针对特定SHA1生成补丁的方法是什么?
很简单:
选项1。 git show commitID > myFile.patch
选项2。 git commitID~1..commitID > myFile.patch
注意:替换commitID
为实际的提交ID(SHA1提交代码)。
git apply --stat file.patch
#显示统计信息。git apply --check file.patch
#申请前检查错误。git am < file.patch
#最后应用补丁。