2011-10-11 42 views
8

在混帳,我可以做到以下幾點:在一個分支中顯示提交但不在另一個分支中的Mercurial等效項是什麼?

git log foo ^bar 

顯示的變更在分支foo但不是在分支bar。 Mercurial有沒有辦法做到這一點?

編輯:多解釋一下用例。假設我在Mercurial中有一個分支(稱爲foo),該分支從default分支出來。我想知道什麼是foo分支中的提交,因此尚未合併到default。也許我在想這種方法是錯誤的,但是在git中,我可以開始編寫foo,合併到master,然後在foo上再做一些工作,然後使用上面的命令查看哪些提交尚未合併。

因此,一個特定的用例是知道分支是否已經完成合併到默認值。從使用Mercurial開始,如果我從default開始關閉一個分支foo以處理一個功能,則將其留在那裏,以便合併並分支出foo以創建bar,其中包含在foofoo之上構建的另一個功能,foo結束由於bar包含foo中的所有變更集,因此我可能只想合併foo中的變更集,因爲我知道這些變更是好的,而bar仍在開發中。希望這有幫助。

+0

變更所以你基本上要看到未default'的'祖先的一部分foo'的'所有祖先。這確實是我答案的後半部分。 –

+0

如果您只想查看一個分支中的提交,只需使用'hg log -b '。如果''是您當前的分支,則可以使用'hg log -b .'。 – weberc2

回答

26

嘗試使用revsetshg help revsets

hg log -r "branch(foo) and not branch(bar)" 

但是,這是一種無用的變更只能在一個名爲分支在同一時間。

也許你是指書籤的所有祖先不是另一個書籤的祖先?

hg log -r "::a and not ::b" 

無論哪種方式,revsets幫助頁面都會幫助您入門。

+1

謝謝,revsets是我正在尋找。我想我的意思是說「變更集」而不是「提交」,所以謝謝你指出。 – Bialecki

+0

是變更集是Mercurial術語,提交是Git lingo; p。你可以交換使用它們。 –

9

你是什麼意思提交分支foo,但不是在酒吧?提交從根本上只在一個分支在mercurial。

hg log -b foo #lists all commits that are in branch foo 
+0

看到我上面的編輯。當你說「提交基本上只在一個分支中提交,」這是否意味着模型與Git不同?我的理解是隻有變更集,你可以將它們應用到任何分支,所以兩個分支都可以應用變更集。 – Bialecki

+0

我編輯我的問題是「更改集」而不是「提交」,謝謝指出這個錯誤。 – Bialecki

+0

@Bialecki,Mercurial有兩種類型的分支,分支和匿名分支。匿名分支只不過是分散的提交,並且可以使用書籤(與git的分支類似)進行跟蹤。命名的分支實際上會得到一個與它們一起提交的標籤,所以提交總是在一個分支上,或者是'default'或者另一個分支。 –

1

顯示在分支FOO,但不是在分支條

hg log -r "::foo and not ::bar and ! destination(branch(bar)) and ! origin(branch(bar))" 
相關問題