这种情况:
我们基于现有的开源git repo(例如source-repo)创建了一个“私有” repo(例如our-repo)。
我们一直在开发代码,并已将大约20个合并到我们的仓库中。因此,仓库从“ State_Initial”移到“ State_Current”。
现在,出于业务原因,我们希望将所有开发工作移交给第三方。基于某些法律问题,唯一的选择是我们为他们提供所有更改的“单个”补丁文件。那是“ State_Initial”和“ State_Current”之间的压缩补丁。
我环顾四周,发现
git format-patch -X
Run Code Online (Sandbox Code Playgroud)
但是,它会生成“ n”个.patch文件。
有没有一种创建单个补丁文件的方法,以便如果我们基于“ source-repo”创建一个仓库并应用该补丁,它将带我们进入“ State_Current”?
小智 22
您可以在 <COMMIT1> 和 <COMMIT2> 之间生成单文件补丁,如下所示:
生成补丁:
git format-patch <COMMIT1>^..<COMMIT2> --stdout > commits.patch
Run Code Online (Sandbox Code Playgroud)
应用补丁:
git am commits.patch
Run Code Online (Sandbox Code Playgroud)
生成补丁:
git diff <COMMIT1>^..<COMMIT2> > diff.patch
Run Code Online (Sandbox Code Playgroud)
应用补丁:
git apply diff.patch
Run Code Online (Sandbox Code Playgroud)
在 Windows 上,您最好在 Git Bash 中运行上述命令。如果您使用PowerShell并在应用补丁时出现错误,您可以尝试将补丁文件转换为UTF-8编码。
如果您出于某种原因想要将第一次提交包含到补丁中。你可以做:
git format-patch --root --stdout > all.patch
Run Code Online (Sandbox Code Playgroud)
或者
git diff 4b825dc642cb6eb9a060e54bf8d69288fbee4904 HEAD > diff.patch
Run Code Online (Sandbox Code Playgroud)
4b825dc642cb6eb9a060e54bf8d69288fbee4904 代表“空树”,请参阅如何获取第一次提交的 Git diff?
以下命令创建一个.patch
包含多个提交的文件。
git format-patch cc1dde0dd^..6de6d4b06 --stdout > foo.patch
Run Code Online (Sandbox Code Playgroud)
然后可以像这样应用它:
git am foo.patch
Run Code Online (Sandbox Code Playgroud)
注意:如果要包括第一个提交SHA,请确保使用^..
代替..
。
Ror*_*ane -2
git format-patch
可以将修订范围作为参数。看git help format-patch
:
\n\n\n概要
\n\nRun Code Online (Sandbox Code Playgroud)\n\ngit format-patch [-k] [(-o|--output-directory) <dir> | --stdout]\n ... (many flags omitted)\n [--progress]\n [<common diff options>]\n [ <since> | <revision range> ] \n
描述
\n\n\xe2\x80\xa6
\n\n有两种方法可以指定要操作的提交。
\n\n\n
\n- \n
单个提交
<since>
指定导致当前分支尖端的提交不在导致输出的历史记录中<since>
。- \n
通用
<revision range>
表达式(参见gitrevisions (7) 中的“指定修订”部分)表示指定范围内的提交。
例如,以下命令为当前分支上的最后三个提交生成补丁:
\n\ngit format-patch HEAD~3..HEAD\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
2320 次 |
最近记录: |