2008-09-24 72 views
30

假設我有一組資源庫文件夾的提交...撤消特定修訂

123 (250 new files, 137 changed files, 14 deleted files) 
122 (150 changed files) 
121 (renamed folder) 
120 (90 changed files) 
119 (115 changed files, 14 deleted files, 12 added files) 
118 (113 changed files) 
117 (10 changed files) 

我希望得到一個工作拷貝,其中包括來自117版本以後的所有更改,但不包括更改修訂版118和120.

編輯:或許使問題更清楚,我想撤消在118和120中進行的更改,同時保留所有其他更改。該文件夾包含數百個子文件夾中的數千個文件。

達到此目的的最佳方法是什麼?

答案,感謝布魯諾和Bert,是命令(在這種情況下,除去120進行完全合併後)

svn merge -c -120 . 

注意,版本號必須與指定領先減號。 「-120」而不是「120」

回答

31

要撤消的修訂118和120:

svn up -r HEAD  # get latest revision 
svn merge -c -120 . # undo revision 120 
svn merge -c -118 . # undo revision 118 
svn commit   # after solving problems (if any) 

另請參見說明書和附圖的Undoing changes

請注意-c -120參數中的減號。從Subversion 1.4開始支持-c(或--change)交換機,舊版本可以使用-r 120:119

-2

我想你可以創建修訂117的一個分支,然後合併一切,除了118和120

svn copy -r 117 source destination 

然後結帳這個分支,並從那裏做svnmerge.py merge -r119,120-123

編輯:這不會撤銷分支/中繼中的修訂。改爲使用svn merge

+1

我也想知道這件事......但是這樣做的成功與否很大程度上取決於117,118和119是否改變了相同的文件?你會不會有從118登記中拿到一些人工製品的風險? – 2008-09-24 10:33:32

8

如果您使用Subversion的Windows客戶端TortoiseSVN,有一種更直接的方法。您只需點擊以查看更新工作副本中的日誌,選擇要撤消的修訂,右鍵單擊,然後選擇「恢復這些修訂中的更改」。

這是一項安全操作,因爲這些更改僅適用於您的工作區。您仍然必須承諾修改您的存儲庫。

這是TortoiseSVN最好的功能之一。我一直是一個命令行的人,但烏龜改變了我的想法。

+1

在Mac上,SVN客戶端Cornerstone可以做到最好。我嘗試過版本,但無法與Cornerstone競爭這類工作。 – 2011-12-05 09:37:24