Mercurial show diff against 2 parents or base during merge

有些话、适合烂在心里 提交于 2019-12-25 03:54:28

问题


Our teem recently faced with merge that removes one leaf of merge and we "lost" changes (as if you perform hg merge --tool internal:local).

This happen because we don't experienced with hg merge command.

hg diff shown only one difference, but not other.

BASE --- HEAD1 --- MERGE
   \---- HEAD2 --/

Suppose in HEAD1 I merge HEAD2 but has not yet commit changes.

HEAD2 diff against MERGE I see by hg diff. It is -r BASE:HEAD2 patch.

How can I see diff between current local merge state with HEAD1 as if we merge from HEAD2

How can I see diff between current local merge state with BASE?


回答1:


Thanks @Vince for suggestion. I reread hg help diff and hg help revset and get that I want.

Assume that you at MERGE before commit and perform merge from HEAD1.

To compare diff against HEAD1 use one of:

hg diff
hg diff -r .
hg diff -r HEAD1

Check:

 hg log -r .

To compare diff against HEAD1 use one of:

hg diff -r HEAD2

If you have only 2 heads in current branch last expression can be written without HEAD2 name:

hg diff -r 'branch(.) & head() - .'

Check:

hg log -r 'branch(.) & head() - .'

To compare against BASE:

hg log -r 'ancestor(HEAD1, HEAD2)'

If you have only 2 heads in current branch last expression can be written without HEAD1/HEAD2 names::

hg diff -r 'ancestor(branch(.) & head())'

Check:

hg log -r 'ancestor(branch(.) & head())'

I wander if there are any shortcut for second parent of current merge. For first - just dot sign...

UPDATE Hm... p1() and p2() are awesome! I rewrote my examples in way that they have no concrete names HEAD1/HEAD2:

hg diff -r 'p1()'
hg diff -r 'p2()'
hg diff -r 'ancestor(p1(), p2())'


来源:https://stackoverflow.com/questions/25238277/mercurial-show-diff-against-2-parents-or-base-during-merge

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!