有時候SVN提交錯了,需要回退版本。有時候我們需要暫時切換到之前的某個版本進行調試等。這時候就是需要SVN版本回退功能。
網上對於SVN的版本回退的文章,連內容都是出奇的一致,而且模棱兩可,人云亦云。可能是大家用SVN比較少,用命令行的更少,畢竟git是目前做好用的版本控制工具,另外SVN的工具也很好用。
暫時性回退
暫時回退,做完工作後再切換回來。
svn up -r 12494
本質上是將SVN本地代碼更新到了某此提交。
之後使用svn update操作還能回到當前最新的提交處。
永久回退
有時候每次提交出錯了,我們需要撤銷,但是已經提交到了遠程,那怎麼處理呢,git有reset --hard,svn沒有這玩意,svn操作起來比git,還是有點差😂。
SVN需要兩步操作:
- 回退
svn merge -r 12506:12494 /Users/xxx/Documents/xxx/SVN/xxx/xxx_20.03
- 提交
svn commit -m "revert verison from r12506 to r12494"
做上面的處理之前先將自己的代碼update到最新。
詳細說明:
首先回退到我們想撤銷操作前的那次提交:
svn merge -r 12506:12494 /Users/xxx/Documents/xxx/SVN/xxx/xxx_20.03
上面的操作讓SVN從r12506的提交回退到r12494,本質上是將r12506包括r12506這次的提交給撤銷了,保留到了r12494處的提交。
後面的是文件路徑,我比較懶,直接寫了項目的路徑,正對整個項目進行回退。也可以正對某個文件或文件夾進行操作。
其次將回退過來的操作提交到遠程:
svn commit -m "revert verison from r12506 to r12494"
log記錄如下:
回退前的log
------------------------------------------------------------------------
r12506 | MengXiang | 2020-06-18 07:30:45 +0800 (四, 18 6 2020) | 2 lines
xxxx...
------------------------------------------------------------------------
r12499 | MengXiang | 2020-06-17 10:58:15 +0800 (三, 17 6 2020) | 2 lines
xxxx...
------------------------------------------------------------------------
r12494 | Siwen | 2020-06-16 09:03:04 +0800 (二, 16 6 2020) | 1 line
xxxx...
------------------------------------------------------------------------
MengXiang的這兩次提交需要被撤回,提交有誤。也就是說需要回到到Siwen的r12494這次提交。
回退後的log
------------------------------------------------------------------------
r12508 | MengXiang | 2020-06-18 10:23:42 +0800 (四, 18 6 2020) | 1 line
xxxx...
------------------------------------------------------------------------
r12507 | AutoPackage | 2020-06-18 10:15:21 +0800 (四, 18 6 2020) | 1 line
xxxx...
------------------------------------------------------------------------
r12506 | MengXiang | 2020-06-18 07:30:45 +0800 (四, 18 6 2020) | 2 lines
xxxx...
------------------------------------------------------------------------
r12499 | MengXiang | 2020-06-17 10:58:15 +0800 (三, 17 6 2020) | 2 lines
xxxx...
------------------------------------------------------------------------
r12494 | Siwen | 2020-06-16 09:03:04 +0800 (二, 16 6 2020) | 1 line
xxxx...
------------------------------------------------------------------------
從log上看,SVN會生成一個新的提交r12508,因爲我們重新commit了,而且保留了需要被撤銷的兩次提交。而且回退後,代碼重新回到了r12494這次提交的內容。