2013-04-21 68 views
0

所以我剛開始使用Mercurial,遇到了一個問題,我不確定如何正確處理。這裏的示例場景:糾正Mercurial錯誤的正確方法?

Demo Branch --- Good Change 1 --- Bad Change 2 --- Good change 3 --- Good change 4 
Prod Branch --- \Good Change 1 --- \Bad Change 2 --- \Good Change 3 --- \Good Change 4 

所以基本上一個很好的改變承諾,測試和生產合併。不好的改變被測試,假定工作,並且推動生產。最後又有兩個更好的變化被推向了生產。我們現在意識到「呃哦」第二次變化實際上是一個問題!我們需要恢復這一點,但我們仍然在那裏發生很好的變化3和4。

回退工作在演示,但不是prod,因爲它是一個合併。我最終得到了一切正常,但有很多移植,更新和合並。看起來好像應該有一個簡單的方法來解決這個問題,同時保持所有其他事情的前進。謝謝!

+0

您是否會編輯您的問題,以提供退出時出錯的更多詳細信息?在演示中退出,然後合併爲prod聽起來非常合理,所以很好找出它爲什麼不適合你。 – shambulator 2013-04-22 07:09:30

+0

我的猜測是OP沒有做退出,但做了回滾或剝離。退出相當可靠。他可能想要查看:http://stackoverflow.com/questions/5371159/what-is-the-difference-between-rollback-backout-and-strip-in-the-mercurial-eclin。我的另一個猜測是他被迫推了多個頭。 – 2013-04-22 16:16:26

回答

0

回退製作的演示,但不督促,因爲它是一個合併

跆拳道?如果changeset是repo中的普通變更集,那麼在推送此變更集後它將是相同的變更集。

推!=合併,永遠不會合並。如果您想放棄更改集,可以在源存儲庫中退出(因此 - 獲取新的額外更改集)併發布此更改,您必須將推回退出更改集以生成(髒歷史,但是完全正確的回購狀態)

0

我的理解是,這是事情的開始。

Demo G1----B2----G3----G4 
      \  \  \  \ 
Prod ----M1----M2----M3----M4 

...然後你退縮了在演示分行的不良變化

Demo G1----B2----G3----G4----BOB2 
      \  \  \  \ 
Prod ----M1----M2----M3----M4 

所有你需要在這一點上做的是合併再次

Demo G1----B2----G3----G4----BOB2 
      \  \  \  \  \ 
Prod ----M1----M2----M3----M4-----M5 

一個背out change-set與其他更改集沒有區別。它只是與原來的效果相反。我認爲你所做的是試圖將包括不良變更在內的合併退回到你的Prod分支(M2),但這有一些奇怪的影響,如here所述。

另外,你也可以在兩個分支上退出B2,這應該也沒問題。

Demo G1----B2----G3----G4----BOB2 
      \  \  \  \  
Prod ----M1----M2----M3----M4-----BOB2