git patch 补丁

普通补丁

# 发送者生成一个补丁
git diff xxx > my.patch
# 接收者在其他地方使用这个补丁
git apply < my.patch

正式补丁 git format-patch

  • git format-patch生成补丁用于 email 发送,格式是类似 UNIX mailbox
  • 命令的输出用于 email 发送或者git am直接使用
  • 是更正式的设置,记录作者名字或签名

参数

  • --root从提交历史开始的所有提交
  • -M检测重命名
  • -B分割完整的重写信息为删除和创建对,即把提交当做删除旧文件,创建新文件
    • -M -B可将一个完全重写的文件当做重命名
  • --stdout将所有提交以 mbox 格式打印到标准输出,而不是为每个提交创建一个文件

    • 不使用时,在当前文件夹为每次提交生成一个单独的文件,并打印文件的名字

      # 为某一时刻生成补丁
      git format-patch xxxx
      # 为某一个提交范围生成补丁
      git format-patch xxxx..HEAD^^
      # 提取在当前分支但是不在 origin 分支的提交
      git format-patch origin
      # 提取工程开始到 <commit> 的所有的提交
      git format-patch --root <commit>
      # 等同于
      git format-patch -M -B origin
      # 提取当前分支最上面的 3 次提交,生成补丁
      git format-patch -3
      

用于邮件发送

# 发送者可使用 git-send-email 发送 git format-patch 的结果给接收者
# 接收者保存邮件到文件 email.txt,然后应用补丁创建一个提交,会自动包含作者的信息
git am < email.txt

直接用于 git am

  • git am 将 mailbox 的邮件信息分割成提交日志信息、作者信息和补丁,应用它们至当前分支

    # 提取 R1 和 R2 之间的提交,使用 git am 来 cherry-pick 提交应用到当前分支
    git format-patch -k --stdout R1..R2 | git am -3 -k
    

参考

相关