从当前工作目录中的更改创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 diff
和git 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相同的补丁(不是我推荐使用该工具):
- 提交您的工作更改
- 右键单击分支根目录,然后单击
Tortoise Git
– >Create Patch Serial
- select任何一个范围是有意义的(
Since
:如果你很好的同步,FETCH_HEAD
将会工作) - 创build补丁(es)
- select任何一个范围是有意义的(
- 右键单击分支根目录并单击
Tortise Git
– >Show Log
- 在临时提交之前,右键单击提交,然后单击
reset "<branch>" to this...
- select
Mixed
选项
以及如何应用它们:
- 右键单击分支根目录并单击
Tortoise Git
– >Apply Patch Serial
- select正确的补丁(es)并应用它们
- 右键单击分支根目录并单击
Tortise Git
– >Show Log
- 在修补程序的提交之前 ,右键单击提交,然后单击
reset "<branch>" to this...
- select
Mixed
选项
要使用修改后的文件和新文件创build修补程序(分阶段),可以运行:
git diff HEAD > file_name.patch
如果你想做二进制,当你运行git diff
时候给一个--binary
选项。