情况是这样的:
1.我们创建了一个基于现有开源git repo(source-repo)的“私有”repo(our-repo)。
1.我们一直在开发代码,大约有20个合并到我们的repo中。所以,repo从“State_Initial”移到了“State_Current”。
现在,出于商业原因,我们希望将我们的所有开发工作移交给第三方。基于一些法律的问题,我们唯一的选择是给予他们一个“单一”的补丁文件,其中包含我们所有的更改。这是一个介于“State_Initial”和“State_Current”之间的压缩补丁。
我环顾四周,发现
git format-patch -X
但是,它会生成“n”个.patch文件。
是否有一种方法可以创建一个补丁文件,这样,如果我们创建一个基于“source-repo”的repo并应用补丁,它会将我们带到“State_Current”?
7条答案
按热度按时间vmdwslir1#
以下命令创建一个包含多个提交的
.patch
文件。然后,您可以按如下方式应用它:
**注意:**如果您希望包含第一个提交SHA,请确保使用
^..
而不是..
。jxct1oxe2#
您可以使用
git diff
:git diff 0f3063094850 > ./test.patch
qoefvg9y3#
创建一个名为
squashed
的新分支,该分支包含一个squashed commit。该分支的内容与普通分支完全相同,但没有历史记录。仔细检查,如果满意,使用
format-patch
创建一个补丁文件。这是一个非破坏性的操作,之后你可以切换回正常的开发分支。你可以
tag
压缩的分支来保存你通过电子邮件发送给他们的内容,或者如果你不再需要它,使用branch -D
删除它。thigvfpy4#
如果出于某种原因,你不想创建一个一次性分支并挤压
state_initial
和state_current
之间的所有提交,然后使用git format-patch
,还有一个替代方法。如果你从state_initial分支出来,并且你的分支是在源分支之上重定基的:git format-patch source_branch <patch_file_name>
当你执行
git am <patch_file_name>
时,它不会重建你的整个提交链。但是这个补丁文件将是一个连续的更改列表。如果你在多个提交中更改了一些东西,并且又改回了一些东西,如果有人检查补丁文件,它仍然是可见的。t3irkdon5#
使用以下命令:
-n表示要为此补丁生成多少个提交,表示要从哪个提交生成。
pprl5pva6#
“将最后10个补丁从头文件中取出放入单个补丁文件中:“
git format-patch -10 HEAD --stdout > 0001-last-10-commits.patch
来源:https://stackoverflow.com/a/16172120/9478470类似问题的答案:如何为特定的提交生成Git补丁?
zqdjd7g97#
git format-patch
可以将修订范围作为参数。请参阅git help format-patch
:简介
说明
...
有两种方法可以指定要操作的提交。
1.单个提交
<since>
指定指向当前分支尖端的提交不在指向要输出的<since>
的历史记录中。1.一般的
<revision range>
表达式(参见gitrevisions(7)中的“SPECIFYING REVISIONS”部分)表示指定范围内的提交。例如,以下命令为当前分支上的最后三次提交生成修补程序: