(与Git diff branch against working tree not including merges略有不同的问题)
基本上我想要git diff origin/develop...working-tree
。
从技术上讲,我想要的是git diff $(git-merge-base origin/develop HEAD)
,它将根据工作树区分合并基础;但我想同时保留...
速记。
origin/develop...
部分计算正确的合并基础(与HEAD合并),但它也被硬编码,假设比较也是针对HEAD的。有没有办法保留...
速记引用,但是对工作树进行区分?
答案 0 :(得分:1)
没有。您不能将简写符号与工作树上的差异结合使用。您必须使用较长的表格。
你可以创建一个调用shell的Git别名:
alias.basevtree=!git diff $(git merge-base @{u} HEAD)
(我不确定你^
在那里做了什么),然后运行git basevtree
,但你无法用三点语法来理解它。
答案 1 :(得分:1)
2020年11月更新:是的,现在有可能。
运行git diff --merge-base <commit>
等同于运行git diff $(git merge-base <commit> HEAD)
,这应该使您在merge-base和当前工作树之间有所区别。
在Git 2.30(Q1 2021)上,“ git diff A...B
(man)”学习了“ git diff --merge-base A B
(man)< / sup>,这是说同样事情的捷径。
请参见commit cce7d6e,commit 0f5a1d4,commit df7dbab,commit 177a830,commit 4c3fe82(2020年9月20日),commit 3d09c22(2020年9月14日),和commit 308d7a7的commit a8fa6a0,commit b277b73,commit 8023a5e,Denton Liu (Denton-L
)(2020年9月17日)。
(由Junio C Hamano -- gitster
--在commit b6fb70c中合并,2020年11月2日)
builtin/diff-index
:学习--merge-base
签名人:刘登顿
目前尚没有简单的方法来获取工作树或索引与任意commit和HEAD之间的合并基础之间的差异。
甚至diff的...
表示法也不允许这样做,因为它仅在两次提交之间起作用。但是,希望在不考虑上游分支所做的更改的情况下,希望查看自己在分支上所做的所有更改以及未提交的更改的用户具有执行此操作的能力。
教diff-index和diff(一次提交)的
--merge-base
选项,该选项允许用户将提交和HEAD的合并基础用作“之前”端。'git diff-index' [-m] [--cached] [--merge-base] [<common diff options>] <tree-ish> [<path>...]
git diff-index
现在包含在其man page中:
--merge-base
使用合并基础,而不是直接比较
<tree-ish>
在<tree-ish>
和HEAD之间。
<tree-ish>
必须是提交。
git diff
现在包含在其man page中:
如果给定
--merge-base
,请使用合并基础,而不要使用<commit>
<commit>
和HEAD
中的一个。
git diff --merge-base A
等同于git diff $(git merge-base A HEAD)
。
git diff
现在包含在其man page中:
在
--merge-base
情况下以及在最后两种使用..
的形式中 符号,可以是任何<tree>
。
并且:
builtin/diff-tree
:学习--merge-base签名人:刘登顿
先前的提交引入了
--merge-base
,这是一种获取工作树或索引与任意提交和HEAD之间的合并基础之间的区别的方法。扩展此选项以支持也给出两次提交并且行为与
git diff A...B
(man)相同的情况是有意义的。引入
--merge-base
标志,以代替三点符号。因此,我们可以将以上内容写为
git diff --merge-base A B
(man)。
git diff-tree
现在包含在其man page中:
--merge-base
使用合并来代替直接比较
<tree-ish>
在两个<tree-ish>
之间作为“前”边。
必须提供两个<tree-ish>
,并且它们都必须是提交。
git diff
现在包含在其man page中:
如果给出了
--merge-base
,则将两次提交的合并基数用于 “在...之前”。
git diff --merge-base A B
等同于git diff $(git merge-base A B) B
。