我在 git 存储库中有一个文件。我从分支release中 checkout 它,对其进行编辑以修复问题,然后将其 checkin 新分支bugfix。我现在想要制作一个捕获此编辑的差异文件。我想使用 patch -p0
将此 diff 文件应用到 release 分支的单独副本,该副本不受 git 控制。修补后,我希望该文件与我在分支 bugfix 中的内容相匹配。
我尝试使用命令git diff release bugfix -- myfile.m4
。它给了我一个 .diff 文件,该文件开始,
index 17641f7482..2b31725fae 100644
--- a/myfile.m4
+++ b/myfile.m4
[… rest of diff elided …]
当我使用patch -p0
将此差异应用到我的单独存储库时,它失败了。补丁无法找到路径 a/myfile.m4
和 b/myfile.m4
,因为它们当然不存在。我的源代码中没有目录 a
和 b
。请注意,如果我可以使用 patch -p1,那么 diff 将作为补丁使用。但是,由于工具限制,我无法轻松使用 patch -p1
。
我希望 .diff 文件省略 a/
和 b/
前缀。我希望 diff 文件读取如下内容:
index 87641f7482..2821725fae 100644
--- myfile.m4
+++ myfile.m4
[… rest of diff elided …]
有没有办法让 git diff 生成没有那些不存在的路径前缀的差异?
有一个解决方法:从 release 分支 check out 文件,将其重命名为 myfile.m4.orig
,然后从 bugfix< check out 修改后的文件/strong> 分支,然后执行 diff -u myfile.m4.orig myfile.m4
。这给了我一个可以与 patch -p0
一起使用的 diff。但我想避免使用人为的文件名创建一个单独的文件。
最佳答案
您可以使用 --dst-prefix=
和 --src-prefix=
指定目标和源前缀,我想您也许可以设置它们为空字符串:
$ git diff --src-prefix= --dst-prefix= release bugfix -- myfile.m4
正如评论中指出的,您还可以使用 --no-prefix
:
$ git diff --no-prefix release bugfix -- myfile.m4
关于git - 如何告诉 `git diff` 使 diff 可与 `patch -p0` 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71108550/