回答
如果您還沒有發佈回購公開,你能做到這一點
hg clone -r (parent1 of bad merge) -r (parent2 of bad merge) old new
並刪除舊的回購。
您將需要Mq擴展名。如果您沒有打開,請將其添加到您的Mercurial.ini
或.hgrc
文件中。
[extensions]
hgext.mq=
如果您不熟悉它,可以使用Mq extension來操縱歷史記錄。好消息是,這將使我們能夠修復您的回購。壞消息是,任何擁有複製的repo的克隆人都必須再次克隆它,因爲我們將改變歷史。
首先,讓你的repo的另一個克隆工作,所以我們不會搞砸任何東西。
現在,找到合併變更集(合併default
和您的命名分支)的修訂版ID。寫下來。我們將其稱爲changesetM
。現在找到下一個變更集的修訂ID。寫下來。我們將其稱爲changesetN
。
一旦你有了這兩個修訂版本的標識,你可以回到你的命令提示符和cd
進入你的回購。然後輸入了以下內容,用適當的修訂ID替換changeset[M|N]
:
$ hg qimport -r changesetN:tip
# This will add all of your changes since the merge to the queue
$ hg qpop -a
# This pops them all out of your history.
$ hg strip changesetM
# This removes the merge changeset.
$ hg update -C default
# Make sure we're on the default branch
$ hg qpush -a
# Take the changesets in the queue and push them back onto your history.
$ hg qfinish -a
# Remove changesets from the queue and finalize them as normal changesets.
從本質上講,你是默認分支上衍合新的變更,刪除的過程中合併變更。完成後,您需要將更改推送到服務器上的新存儲庫,並讓您的同事克隆新副本。
最後,如果您有任何其他Mercurial問題,也可以查看kiln.stackexchange.com。
UPDATE
我忘了說:如果有人基於東西,是隻有在其他分支的變化,有可能hg qpush -a
將失敗。你會看到一個foo.txt.rej
和foo.txt.orig
文件鋪設。不幸的是,你必須自己解決這個問題。要解決此問題,請打開原始文件.orig
文件和.rej
文件,然後選擇合適的更改以將其保存在原始文件中。將它合併後,使用hg qrefresh
將該修補程序更新到新的合併修補程序。從他們,你應該能夠再次運行hg qpush -a
並繼續。如果您在另一個修補程序中再次遇到相同的錯誤,請按照相同的步驟進行操作。
我和你在一起,直到hg qpush -a。我在控制檯中得到以下內容: 正在申請xxx.diff 修補文件----- 羣發#1失敗806 1個羣發失敗 - 保存拒絕「...」 補丁失敗,無法繼續 ... 申請過程中的錯誤,請修復並刷新310.diff – 2010-06-30 15:21:33
請參閱我答案中的更新部分。 – tghw 2010-06-30 17:54:25
這破壞了歷史,所以如果錯誤已經傳播,它將不起作用。請參閱:http://stackoverflow.com/questions/265944/backing-out-a-backwards-merge-on-mercurial – 2010-07-22 17:02:46
我遇到下面的情況下走到今天:
@ changeset: 1728:5d703e1051d3
|\ parent: 1727:1a5f73b5edb4
| | parent: 1720:65ddd0bde225
| | user: nn
| | date: Wed Feb 27 10:35:00 2013 +0100
| | summary: Merge with SomeBranch
| |
| o changeset: 1727:1a5f73b5edb4
| | user: nn
| | date: Wed Feb 27 10:34:30 2013 +0100
| | summary: lorem ipsum
| |
[some more changesets]
| |
o | changeset: 1720:65ddd0bde225
| | branch: SomeBranch
| | user: nn
| | date: Wed Feb 27 07:44:46 2013 +0100
| | summary: lorem ipsum
凡SomeBranch不應該被合併到默認。我們做了什麼來解決這個問題,是使用backout
命令與parent
選項,如下所示:
hg backout --rev=1728 --parent=1727
通過這個你不撤消合併本身:看一個分支圖(或者與圖形日誌或在TortoiseHg)你仍然會看到SomeBranch進入默認在r1728。然而,合併的結果被撤銷,這意味着包含退出(在我的情況下爲r1729)的變更集與r1727完全相同。
這是否也照顧合併標誌? – elzapp 2017-11-17 15:16:54
- 1. Mercurial合併
- 2. 與窯(mercurial)合併
- 3. Mercurial提交和合並
- 4. 瞭解Mercurial合併邏輯
- 5. Mercurial中的跨庫合併?
- 6. Mercurial隊列:合併補丁
- 7. Mercurial,檢測合併衝突
- 8. lfconvert後合併mercurial回購
- 9. 恢復Mercurial中的合併
- 10. Mercurial和合並工具?
- 11. 在Mercurial中合併分支
- 12. 來自mercurial git - 合併?
- 13. 無法在mercurial中合併
- 14. 新手 - mercurial合併問題
- 15. Mercurial中的合併問題
- 16. 在mercurial中合併書籤
- 17. Git Undo撤消請求合併後的最後幾次推送,保持合併
- 18. 合併到Git中比在Mercurial中合併嗎?
- 19. hg mercurial - 如何在shell中合併3路合併窗口
- 20. 瞭解Mercurial合併更改集
- 21. 如何合併Mercurial上的兩個頭?
- 22. Mercurial - 合併最後三個unpushed提交
- 23. Netbeans作爲Mercurial合併工具
- 24. Mercurial:合併兩個本地回購
- 25. 在Mercurial中合併方向問題嗎?
- 26. 合併遠程Mercurial存儲庫
- 27. Mercurial - 重命名/合併存儲庫
- 28. Mercurial/Tortoiehg合併分支沒有更新
- 29. 合併期間的Mercurial刪除文件
- 30. 使用mercurial合併cvs分支
This Works ... thanks!現在我還有一個問題:如何在錯誤合併到新克隆的存儲庫後應用更改集? – 2010-06-30 14:28:53
@Steve看到我的答案。你必須在老頭上「改造」它們。 – tghw 2010-06-30 14:29:37
回退無法撤消合併。 – tghw 2010-06-30 14:31:19