从当前工作目录中的更改创build一个git补丁

说我有我的工作目录中的未提交更改。 我怎样才能从那些无需创build一个提交补丁?

git diff for unstaged更改。 git diff --cached分阶段更改。

如果您尚未提交更改,则:

 git diff > mypatch.patch 

但是有时候会发生这样的情况:你正在做的一些事情是新的文件,这些文件是未被跟踪的,不会在你的git diff输出中。 所以,一种做补丁的方法是为所有新的提交阶段(但不要执行提交),然后:

 git diff --cached > mypatch.patch 

如果要将二进制文件添加到修补程序(例如,mp3文件),请添加“二进制”选项:

 git diff --cached --binary > mypatch.patch 

您可以稍后应用该修补程序:

 git apply mypatch.patch 

git diffgit apply将适用于文本文件,但不适用于二进制文件。

您可以轻松创build一个完整的二进制补丁,但是您将不得不创build一个临时提交。 一旦你做出临时提交,你可以创build补丁:

 git format-patch <options...> 

修补程序后,运行以下命令:

 git reset --mixed <SHA of commit *before* your working-changes commit(s)> 

这将回滚您的临时提交。 最后的结果会使您的工作副本(有意)变得与原来相同。

在接收方,您可以使用相同的技巧将更改应用到工作副本,而不必提交提交历史logging。 简单地应用补丁,然后git reset --mixed <SHA of commit *before* the patches>

请注意,您可能需要对整个选项进行同步。 我在使用补丁的时候看到了一些错误,当时那个人没有像我那样拉下太多的变化。 可能有办法让它起作用,但是我没有深入了解它。


以下是如何在Tortoise Git中创build相同的补丁(不是我推荐使用该工具):

  1. 提交您的工作更改
  2. 右键单击分支根目录,然后单击Tortoise Git – > Create Patch Serial
    1. select任何一个范围是有意义的( Since :如果你很好的同步, FETCH_HEAD将会工作)
    2. 创build补丁(es)
  3. 右键单击分支根目录并单击Tortise Git – > Show Log
  4. 临时提交之前,右键单击提交,然后单击reset "<branch>" to this...
  5. selectMixed选项

以及如何应用它们:

  1. 右键单击分支根目录并单击Tortoise Git – > Apply Patch Serial
  2. select正确的补丁(es)并应用它们
  3. 右键单击分支根目录并单击Tortise Git – > Show Log
  4. 在修补程序的提交之前 ,右键单击提交,然后单击reset "<branch>" to this...
  5. selectMixed选项

要使用修改后的文件和新文件创build修补程序(分阶段),可以运行:

 git diff HEAD > file_name.patch 

如果你想做二进制,当你运行git diff时候给一个--binary选项。