首页 文章

为特定提交生成git补丁

提问于
浏览
1005

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

我尝试使用 git format-patch <the SHA1> ,但是从那个SHA1开始为每次提交生成一个补丁 . 在生成几百个补丁之后,我不得不杀死这个过程 .

有没有办法只为特定的SHA1生成补丁?

9 回答

  • 51

    尝试:

    git format-patch -1 <sha>
    

    要么

    git format-patch -1 HEAD
    

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

    • <n>从最顶层的提交准备补丁 .

    使用以下命令应用修补程序:

    git am < file.patch
    
  • -1

    要从特定sha1哈希中从最顶层提交生成修补程序:

    git format-patch -<n> <SHA1>
    

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

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

    假设您在提交1之后提交了id 2,那么您将能够运行:

    git diff 2 1 > mypatch.diff
    

    其中2和1是SHA哈希 .

  • 19

    此命令(已由@Naftuli Tzvi Kay建议):

    git format-patch -1 HEAD
    

    用特定的散列或范围替换HEAD .

    将为最新提交生成补丁文件,格式化为类似UNIX邮箱格式 .

    • <n> - 从最顶层的提交准备补丁 .

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

    git am -3k 001*.patch
    

    见:man git-format-patch .

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

    快速简单的解决方案 .

  • 1629

    如果您想确保(单个提交)补丁将应用于特定提交之上,您可以使用新的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
    

    请参阅commit bb52995commit 3de6651commit fa2ab8611238932(2016年4月26日)Xiaolong Ye (``) .
    (由Junio C Hamano合并 - gitster - 在提交72ce3ff,2016年5月23日)

    format-patch:添加'--base'选项以记录基础树信息维护者或第三方测试人员可能想知道补丁系列适用的确切基础树 . 教git格式 - 修补'--base'选项以记录基础树信息并将其附加到第一条消息的末尾(封面字母或系列中的第一个补丁) . 基本树信息由“基本提交”组成,这是一个众所周知的提交,它是项目历史中其他人工作的稳定部分的一部分,以及零或更多“必备补丁”,这些都是众所周知的飞行中的补丁尚未成为“基础提交”的一部分,需要在应用补丁之前以拓扑顺序在“基础提交”之上应用 . “base commit”显示为“base-commit:”,后跟提交对象名称的40-hex . “必备补丁”显示为“prerequisite-patch-id:”,后跟40-hex“补丁ID”,可以通过“git patch-id --stable”命令传递补丁获得 .

  • 6

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

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

    如果你只想要diff指定文件,你可以:

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

  • 247

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

    这很简单:

    选项1. git show commitID > myFile.patch

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

    注意:将 commitID 替换为实际提交ID(SHA1提交代码) .

相关问题