在进行"简单"合并(一个没有冲突)后,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
Run Code Online (Sandbox Code Playgroud)
这是因为,对于合并,git show使用组合的diff格式,该格式省略了与任一父版本一致的文件.
有没有办法强制git仍然显示组合差异模式的所有差异?
做git show -m将显示差异(分别使用新版本和所有父版本之间的成对差异),但我更愿意在相应的列中使用+/-标记的差异,如组合模式.
rip*_*747 245
查看提交消息:
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
Run Code Online (Sandbox Code Playgroud)
注意这条线:
Merge: fc17405 ee2de56
Run Code Online (Sandbox Code Playgroud)
拿这两个提交ID并反转它们.所以为了得到你想要的差异,你会做:
git diff ee2de56..fc17405
Run Code Online (Sandbox Code Playgroud)
仅显示已更改文件的名称:
git diff --name-only ee2de56..fc17405
Run Code Online (Sandbox Code Playgroud)
并提取它们,您可以将它添加到您的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"'
Run Code Online (Sandbox Code Playgroud)
然后通过这样做来使用它:
git exportfiles ee2de56..fc17405 /c/temp/myproject
Run Code Online (Sandbox Code Playgroud)
CoD*_*anX 66
更好的解决方案(@KrisNuttycombe提到):
git diff fc17405...ee2de56
Run Code Online (Sandbox Code Playgroud)
对于合并提交:
commit 0e1329e551a5700614a2a34d8101e92fd9f2cad6 (HEAD, master)
Merge: fc17405 ee2de56
Author: Tilman Vogel <email@email>
Date: Tue Feb 22 00:27:17 2011 +0100
Run Code Online (Sandbox Code Playgroud)
显示所有ee2de56可以从提交中获得的更改fc17405.请注意提交哈希的顺序 - 它与合并信息中显示的相同:Merge: fc17405 ee2de56
另请注意3个点...而不是2 个点!
有关已更改文件的列表,您可以使用:
git diff fc17405...ee2de56 --name-only
Run Code Online (Sandbox Code Playgroud)
sid*_*e2k 11
您可以在合并之前创建HEAD设置为一次提交的分支.然后,你可以这样做:
git merge --squash testing
Run Code Online (Sandbox Code Playgroud)
这将合并,但不会提交.然后:
git diff
Run Code Online (Sandbox Code Playgroud)
似乎在这里回答:https : //public-inbox.org/git/7vd392ezhx.fsf@alter.siamese.dyndns.org/
所以以类似的方式,运行
$ git diff --cc $M $M^1 $M^2 $(git merge-base $M^1 $M^2)
应该显示一个组合补丁,解释 $M 处的状态相对于其父级和合并基础中记录的状态。
如果您坐在合并提交中,那么这将显示差异:
git diff HEAD~1..HEAD
如果您不在合并提交中,则只需将 HEAD 替换为合并提交。这种方法似乎是最简单、最直观的。
ape*_*arr -3
不,没有办法做到这一点git show.但它有时肯定会很好,而且在git源代码中实现它可能相对容易(毕竟,你只需告诉它不要删除它认为无关的输出),所以这样做的补丁可能会被git维护者接受.
但要小心你想要的东西; 合并一个分支与三个月前分叉的单行更改仍将有一个巨大的差异与主线,所以这样一个完整的差异几乎完全没有用.这就是git没有表现出来的原因.