git diff merge-base with working tree(using ... notation)

时间:2017-11-06 16:14:52

标签: git git-diff

(与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的。有没有办法保留...速记引用,但是对工作树进行区分?

2 个答案:

答案 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 cce7d6ecommit 0f5a1d4commit df7dbabcommit 177a830commit 4c3fe82(2020年9月20日),commit 3d09c22(2020年9月14日),和commit 308d7a7commit a8fa6a0commit b277b73commit 8023a5eDenton 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

相关问题