使用 git diff 为未提交的更改创建补丁显示 a/.... 和 b/

Creating patch using git diff for uncommitted changes shows a/.... and b/

我正在尝试使用命令行为工作区中未提交的更改创建补丁。我正在使用以下命令创建补丁

git 差异 > diff.patch .

这确实创建了一个补丁,但在补丁中它显示了差异

diff --git a/hedwig-client/src/main/java/org/apache/hedwig/client/netty/impl/multiplex/MultiplexHChannelManager.java b/hedwig-client/src/main/java/org/apache/hedwig/client/netty/impl/multiplex/MultiplexHChannelManager.java
index f28a6b2..3db2b7f 100644
--- a/hedwig-client/src/main/java/org/apache/hedwig/client/netty/impl/multiplex/MultiplexHChannelManager.java
+++ b/hedwig-client/src/main/java/org/apache/hedwig/client/netty/impl/multiplex/MultiplexHChannelManager.java

我希望路径中的 a 和 b 不存在。所以它应该看起来像

diff --git hedwig-client/src/main/java/org/apache/hedwig/client/netty/impl/multiplex/MultiplexHChannelManager.java hedwig-client/src/main/java/org/apache/hedwig/client/netty/impl/multiplex/MultiplexHChannelManager.java

知道如何做到这一点。

只需通过删除有问题的字符来修改补丁:

git diff | sed -e 's|^\(diff --git \)a/\(.* \)b/\(.*\)||' > diff.patch

这将检查模式 diff --git a/... b/...,将其分成 5 个部分(diff --gita/ ...b/...) 并省略 a/b/ 部分。

有一个命令行开关:git diff --no-prefix,但你真的不想使用 git diff,你应该做正确的事并在私有分支上提交,然后使用git format-patch 从中生成格式良好的补丁系列(它接受相同的开关)。

还有--src-prefix--dst-prefix来指定任意路径。但请记住,即使不使用 git,大多数人也会使用 patch -sp1 或类似的东西……几乎总是需要前缀路径。