如何“git”显示合并提交与合并的diff输出,即使每个更改的文件与父文件之一一致?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (17)

在做一个“简单”合并(一个没有冲突)之后,git show通常只显示类似的东西

commit 0e1329e551a5700614a2a34d8101e92fd9f2cad6 (HEAD, master)
Merge: fc17405 ee2de56
Author: Tilman Vogel <email@email>
Date:   Tue Feb 22 00:27:17 2011 +0100

Merge branch 'testing' into master

这是因为,对于合并,git show使用组合的diff格式,该格式省略了与父版本中的任一个版本一致的文件。

有没有办法强制混帐仍然显示组合差异模式中的所有差异?

这样做git show -m会显示差异(分别使用新版本和所有父版本之间的成对差异),但我更愿意在组合模式下在各列中使用差异标记+/-。

提问于
用户回答回答于

不,没有办法做到这一点。但是它有时候确实很棒,而且在git源代码中实现它可能相对容易(毕竟,你只需要告诉它不要修剪掉它认为是无关的输出),所以修补程序要这样做可能会被git维护者接受。

尽管如此,请小心你想要的东西; 将一个分支与三个月前分叉的单行更改合并在一起,仍然会对主线产生巨大差异,所以这种完全差异几乎完全无益。这就是为什么git不显示它。

用户回答回答于

查看提交消息:

commit 0e1329e551a5700614a2a34d8101e92fd9f2cad6 (HEAD, master)
Merge: fc17405 ee2de56
Author: Tilman Vogel <email@email>
Date:   Tue Feb 22 00:27:17 2011 +0100

Merge branch 'testing' into master

注意这行:

Merge: fc17405 ee2de56

采取这两个承诺ID并扭转它们。所以为了得到你想要的差异,你会这样做:

git diff ee2de56..fc17405

只显示更改文件的名称:

git diff --name-only ee2de56..fc17405

并提取它们,你可以添加到你的gitconfig:

exportfiles = !sh -c 'git diff $0 --name-only | "while read files; do mkdir -p \"$1/$(dirname $files)\"; cp -vf $files $1/$(dirname $files); done"'

然后通过这样做来使用它:

git exportfiles ee2de56..fc17405 /c/temp/myproject

扫码关注云+社区