使用Mercurial時,如何列出自分支上次合併後合併分支所應用的所有變更集?列出自上次合併以來所有合併的變更集?
回答
Revsets是你的朋友。或者你的剋星,這取決於他們得到多麼複雜:)
以下命令將顯示過去兩年間合併所有相關的變更:
$ hg log -r "first(last(merge(),2)):last(merge()) & ancestors(last(merge()))"
那麼複雜一點的表達(我要看看製作簡單,其後)執行以下操作:
x:y
給你x
和y
之間的所有的變更包括merge()
是包含所有合併的revset。last(...,n)
給出一組的最後n的變更,與n
默認爲1first(...)
爲您提供了一組ancestors(last(merge()))
的第一變更爲包含上次合併的所有祖先一套
結合所有這些,上面的表達式變成(準備好了):給我所有最後兩次合併中的第一次和最後一次合併(包括最後合併)之間的所有變化集合,它們恰好是最後一次合併的祖先。
的ancestors(...)
位過濾掉不相關的任何變更。
可以限制這種通過增加& branch(branchname)
是在一個特定的分支的變化。例如,如果你是從default
合併到release
分支,你可以這樣做:
$ hg log -r "first(last(merge(),2)):last(merge()) & ancestors(last(merge())) & branch(default)"
這不包括實際的合併本身,因爲它們將出現在release
分支。
希望這是有道理的 - 今天下午我會看看我能否得到一個更簡單的方法,但這是第一個想到的問題。在此期間,如果你使用這個,你可以更容易在用戶hgrc文件中創建一個revset別名:
[revsetalias]
contrib = first(last(merge(),2)):last(merge()) & ancestors(last(merge()))
那麼你就可以使用:
$ hg log -r "contrib"
$ hg log -r "contrib & branch(default)"
欲瞭解更多信息,有一個看看hg help revsets
。
我不知道icabod的解決方案是完全正確的。讓我看看我能否解釋。
讓我們來看看這個變化圖。
o----A1----A2----M1--------A3---M2
\ / /
---B1----B2--- /
\ /
----C1--------C2----C3
B
是從o
截取的分支,C
是從B1
採取的分支。如果我們在M2和運行icabod的命令,那麼:
last(merge())
是M2
first(last(merge(),2))
是M1
所以表達式變爲:
hg log -r "M1:M2 & ancestors(M2)"
M1:M2
是所做的更改比版本號M1
和M2
之間的版本號whi ch在這種情況下是A3
,C2
& C3
,其完全忽略C1
。
我認爲你正在尋找M2的祖先,它們不是M1的祖先。即
hg log -r "ancestors(M2) & not ancestors(M1)"
或
hg log -r "ancestors(last(merge())) and not ancestors(first(last(merge(), 2)))"
我想這應該是C1
,C2
,C3
& A3
。它還有一個優點,即它不關心如何或何時將變更集添加到回購中。
唯一的問題是如果倒數第二次合併不是最新合併的祖先。我會離開,作爲一個練習留給讀者;-)
當然,所有這一切都可以通過做hg merge --preview
(或-P
)之前,做了合併是可以避免的,並列出所有的變化當您進行合併時將包含這些集合。
- 1. git:合併來自一個分支的合併變更了以前的合併
- 2. TFS 2010 - 合併變更集
- 3. Git合併 - 未合併來自遠程分支的所有更改
- 4. 合併3所列出(或更多)
- 5. 合併來自多個列的數據合併到一列
- 6. Team Foundation Server的 - 此前合併的變更中合併嚮導再次出現
- 7. Git合併-X他們沒有合併所有的變化
- 8. TFS:合併放棄變更集在合併時顯示爲合併候選人
- 9. 合併來自上游Git回購的新變更
- 10. 使用MPI合併來自所有等級的陣列
- 11. 的Git:Git中列出所有未合併的變化
- 12. git的合併僅變更集
- 13. 有以下陣列合併
- 14. 合併來自父分支的更改
- 15. 列表列出來合併矩陣
- 16. 查找合併中的更改集合
- 17. 合併來自不同文件的列
- 18. Postgresql合併來自JOIN的相同列
- 19. 迭代RDD並更新可變集合返回空集合
- 20. 自我更新集合併發問題
- 21. Spring集合合併
- 22. Propel - 合併集合
- 23. pyspark - 合併2列的集合
- 24. MongoDB的合併結果來自兩個集合
- 25. 合併引用的所有列在data.table
- 26. 更新併發集合
- 27. 選擇首次出現唯一列集合的所有行
- 28. NHibernate的 - 與合併集合
- 29. 自上次合併操作的Git變基
- 30. 合併git中的變更集以進行代碼審查
我不確定這是否正確。我會解釋爲什麼在我的答案中,但也可以自由批評我的答案。 –
@PaulS:看看你的答案,你可能是對的 - 仍然,這是我的一個很好的嘗試:) – icabod
哦,絕對,我偷了一些位來作出我的答案;) –