git format-patch 为提交的特定文件部分生成补丁
git format-patch to generate a patch for a specific file part of a commit
我正在尝试合并为名为 dev
的分支中的功能添加的一些文件。添加了一些文件,更改了一些文件。有没有办法为提交中的选定文件生成补丁,以便它们可以应用于 master?我正在寻找然后将补丁应用到大师。
git format-patch -1 SHA1 --stdout
正在为整个提交生成补丁,但我只需要在提交中生成补丁。
Is there a way to generate a patch for selected files part of a commit so that they can be applied on master?
也许(我不确定您的要求是什么)。让我们从基本事实开始,即 git diff
作为输出提供了将提交 X 更改为提交 Y 的说明。同时,git format-patch
本质上只是 运行s git diff
来获取补丁的差异(几乎所有其他需要差异的 Git 命令也是如此)。
如果您运行 git diff
手动,您可以添加额外的参数。特别是,git diff
在选项和要比较的两个提交之后接受 pathspecs(基本上是文件名)列表:
git diff X Y -- path/to/file
这会限制 "how to change the files" 指令输出以仅显示给定的文件。因此,如果 "for selected files" 表示 "all of the instructions for files A, B, and C, but nothing for files D and E",那么一个简单的:
git diff X Y -- A B C
会成功的。
没办法像这样把git format-patch
变成运行git diff
,不过你可以简单的把格式化后的补丁剪下来重新贴上去,即用git format-patch
像往常一样,然后从中删除差异并将其替换为您的自定义生成的差异 git diff
.
更好的方法
如果 "for selected files" 不是正确的短语怎么办?如果您需要文件 A、B 和 C 的补丁,除了文件 B 的补丁需要 有些不同 怎么办?有一个更好、更灵活的方法来处理这个问题,可以概括为:不要试图伪造它,只做真实的。
也就是说,首先检查您希望修补的相同 提交。 (如有必要,通过 运行ning git fetch
更新您自己的存储库,以便您拥有 他们的 master
作为 origin/master
或 another_remote/master
. 你可以将他们的存储库添加为另一个远程,例如 git remote add another_remote <em>url</em>
,如有必要。)然后创建一个自己的 new 分支,指向这个特定的提交:
git checkout -b for-patching-them origin/master
(这也将使您的分支 for-patching-them
将远程跟踪分支作为其上游。)
现在您有了自己的 分支 ,您可以 git cherry-pick
提交,如果您愿意,可以使用 -n
。然后,您可以根据需要 更改 更改 and/or ,测试它们并提交。您可以使用 --amend
提交,或者进行多次提交并最终进行交互式变基并压缩提交,或者使用您喜欢的任何 Git 工具。
最终,您将有一个或多个提交准备发送给他们,现在您可以 运行:
git format-patch origin/master
获取要发送给他们的精确补丁,而无需编辑该补丁,希望它适用。此外,如果他们在你开始所有这些工作后更新了他们的分支,你可以再次 运行 git fetch
获取他们的更新,然后 git rebase
你的补丁分支根据他们的调整更改,以便您再次准备好 运行 git format-patch
.
我正在尝试合并为名为 dev
的分支中的功能添加的一些文件。添加了一些文件,更改了一些文件。有没有办法为提交中的选定文件生成补丁,以便它们可以应用于 master?我正在寻找然后将补丁应用到大师。
git format-patch -1 SHA1 --stdout
正在为整个提交生成补丁,但我只需要在提交中生成补丁。
Is there a way to generate a patch for selected files part of a commit so that they can be applied on master?
也许(我不确定您的要求是什么)。让我们从基本事实开始,即 git diff
作为输出提供了将提交 X 更改为提交 Y 的说明。同时,git format-patch
本质上只是 运行s git diff
来获取补丁的差异(几乎所有其他需要差异的 Git 命令也是如此)。
如果您运行 git diff
手动,您可以添加额外的参数。特别是,git diff
在选项和要比较的两个提交之后接受 pathspecs(基本上是文件名)列表:
git diff X Y -- path/to/file
这会限制 "how to change the files" 指令输出以仅显示给定的文件。因此,如果 "for selected files" 表示 "all of the instructions for files A, B, and C, but nothing for files D and E",那么一个简单的:
git diff X Y -- A B C
会成功的。
没办法像这样把git format-patch
变成运行git diff
,不过你可以简单的把格式化后的补丁剪下来重新贴上去,即用git format-patch
像往常一样,然后从中删除差异并将其替换为您的自定义生成的差异 git diff
.
更好的方法
如果 "for selected files" 不是正确的短语怎么办?如果您需要文件 A、B 和 C 的补丁,除了文件 B 的补丁需要 有些不同 怎么办?有一个更好、更灵活的方法来处理这个问题,可以概括为:不要试图伪造它,只做真实的。
也就是说,首先检查您希望修补的相同 提交。 (如有必要,通过 运行ning git fetch
更新您自己的存储库,以便您拥有 他们的 master
作为 origin/master
或 another_remote/master
. 你可以将他们的存储库添加为另一个远程,例如 git remote add another_remote <em>url</em>
,如有必要。)然后创建一个自己的 new 分支,指向这个特定的提交:
git checkout -b for-patching-them origin/master
(这也将使您的分支 for-patching-them
将远程跟踪分支作为其上游。)
现在您有了自己的 分支 ,您可以 git cherry-pick
提交,如果您愿意,可以使用 -n
。然后,您可以根据需要 更改 更改 and/or ,测试它们并提交。您可以使用 --amend
提交,或者进行多次提交并最终进行交互式变基并压缩提交,或者使用您喜欢的任何 Git 工具。
最终,您将有一个或多个提交准备发送给他们,现在您可以 运行:
git format-patch origin/master
获取要发送给他们的精确补丁,而无需编辑该补丁,希望它适用。此外,如果他们在你开始所有这些工作后更新了他们的分支,你可以再次 运行 git fetch
获取他们的更新,然后 git rebase
你的补丁分支根据他们的调整更改,以便您再次准备好 运行 git format-patch
.