原文: http://answers.perforce.com/articles/KB_Article/How-To-Rollback-An-Integration
當我們需要將一個branch上的代碼修改集成到另一個branch的時候,我們需要執行命令p4 integ + p4 resolve + p4 submit來完成,通稱我們稱以上的操作為一次integration或merge。
一 rollback integration/merge
有的時候在我們做了p4 integ 來把代碼從一個branch merge到了另一個branch,但是發現有錯誤,或者這個merge不需要了,這時我們將需要撤銷我們剛才的merge操作。
1)如果你只是執行了p4 integ 還沒有執行p4 submit的時候,這時候只需要簡單地在你的client里執行p4 revert就可以撤銷merge了。
2)如果的merge結果已經submit到了p4 server了,則考慮以下幾種方法:
第一種方法: superuser執行p4 obliterate 將merge的CL從p4 server徹底刪除;
第二種方法: 手動對merge中修改的文件恢復到前一個版本,即手動對merge修改的文件執行edit/resolve/submit;
第三種方法: 使用p4v提供的rollback功能,將某個CL rollback,或者把某些文件rollback到先前的CL或時間或label;
二 rollback已經提交的merge的3中方法比較
當rollback已經提交的merge,最重要的考慮是目標文件(merge修改過的文件)是否又有新的修改。如果在merge后沒有新的CL修改與merge相同的文件,使用p4 obliterate是最快速且干凈的方法,如果merge修改的文件被后來的其他的CL修改了,則需要考慮使用p4v中的rollback或手動edit/resolve/submit。
以下的三種方法都各有一些限制。
當使用p4 obliterate的時候,雖然merge的CL的歷史記錄被刪除了,但是如果在merge后有新的CL修改相同的文件,則被修改的文件中merge相關的修改內容不能被刪除。
當使用p4v或用以上的第二種方法手動rollback到先前的版本時,所有相關的CL的記錄將不會刪除。當下次從新merge的時候會遇到文件已經被integrated的問題,需要使用p4 integ -f來強制merge。
更多詳細:
http://answers.perforce.com/articles/KB_Article/How-To-Rollback-An-Integration
http://answers.perforce.com/articles/KB_article/Backing-Out-Submitted-Changelists
http://answers.perforce.com/articles/KB_Article/Backing-out-a-changelist-after-multiple-subsequent-changes
完!