在git中创建一个包含特定文件的补丁

vas*_*fil 44 git patch file

假设我在Origin/master repo之前提交了7个提交.我想创建一个补丁,其中包含已更改的补丁中的特定文件,而不是所有文件.或等效项从已更改的修补程序中排除特定文件.我怎样才能做到这一点?

Mar*_*air 58

您可以git diff通过在命令末尾列出路径来限制输出(在a之后,--以避免路径名和分支名称之间可能存在任何冲突).例如,您可以执行以下操作:

git diff origin/master HEAD -- app/models/region.rb doc/ > changes.patch
Run Code Online (Sandbox Code Playgroud)

...生成仅显示特定文件和特定目录中的差异的补丁.

  • 如果你像我一样来到这里但不知道如何使用 `patch` 命令(我不知道你为什么会,但我没有,所以......),你可以应用补丁使用`patch -p1 < changes.patch`(`-p1` 告诉补丁去除补丁路径中的`a/` 和`b/`) (6认同)

小智 34

您可以在补丁中包含以下文件:

git format-patch <rev> <files...>
Run Code Online (Sandbox Code Playgroud)

git format-patch HEAD^^^ Makefile
Run Code Online (Sandbox Code Playgroud)

会给你三个文件0001- [commit] ... 0003- [commit]只包含Makefile.

  • 虽然我没有在文档中找到任何关于该功能的参考,但它对我有用. (3认同)
  • 这真的有用吗?format-patch文档并未说明您可以将特定文件作为参数. (2认同)
  • 在 git-format-patch 命令的概要中,它确实显示了 `[&lt;common diff options&gt;]` 作为参数。所以我认为 git-diff 的大多数选项都适用于 git-format-patch。 (2认同)