subversion: svn reverse merge
當程式開發到一個段落,卻發現某一個版本不應該被遞交,想要回滾到前一個版本時。
可以使用下面的方式返回:
- svn merge -r “to version” : “from version” PATH , 填入從起始點到終點版本要丟棄的版本,。
svn merge -r 303:302 http://svn.example.com/repos/calc/trunk
svn status
確認文件變動狀態svn diff
確認文件變動符合預期svn commit -m "Undoing change committed in r303."
可以將每個版本當作是一個個小改動的群體,並且可以使用-r做切換;
使用svn merge 做單個或範圍的更動集別到你的工作庫裡面,以上面的範例便是將r303的工作複製到當前的工作庫。
回捲操作(rolling back)的改變跟其他使用svn merge的操作相同,所以在改動後必須使用svn status 跟 svn diff 確認目前的工作狀態是跟預期相同,然後在使用svn commit ,將最後的改動重新commit 到新的版本進數據庫。
可以發現改動的過程,並非真實的移除r303的修改,最原本的改動還是存在在紀錄中,這樣就已經滿足大部分的使用情況。
但還是有辦法可以移除,只是並不建議而且過程複雜。 這也符合Subversion是故意被設計不漏掉任何訊息的特性。
There are special cases, however