我已經找到了如何恢復一個SVN各種實例犯類似如何恢復SVN提交?
svn merge -r [current_version]:[previous_version] [repository_url]
或
svn merge -c -[R] .
但他們都不似乎工作。我嘗試了這些命令並檢查了手動更改的文件。
如何恢復版本號爲1944的提交?如何檢查恢復已完成(沒有查看實際文件中的變化已經恢復)?
我已經找到了如何恢復一個SVN各種實例犯類似如何恢復SVN提交?
svn merge -r [current_version]:[previous_version] [repository_url]
或
svn merge -c -[R] .
但他們都不似乎工作。我嘗試了這些命令並檢查了手動更改的文件。
如何恢復版本號爲1944的提交?如何檢查恢復已完成(沒有查看實際文件中的變化已經恢復)?
不可能「取消」提交修訂,但可以將工作副本恢復到版本1943,並將其提交爲版本1945.版本1943和1945將是相同的,可有效恢復更改。
只是令人討厭的準確性,我會評論如果您有管理員訪問存儲庫,則可以「不提交」。通過使用'svn dump'然後'svn load'創建一個克隆庫直到給定的修訂版本。但是,當然,這不應該在正常情況下使用。 – onon15
我不想取消提交,我想創建一個新的提交編號,並反向進行某個提交。集合說我已經檢出了1944年的版本,在1945年做了一個承諾,我想'恢復'。然後我想要一個1946年的版本,其文件與1944年的版本相同。(當然除歷史以外)但問題依然存在:如何做到這一點?什麼是命令? – Alex
//,@Alex,我也對此感興趣,特別是在類似'$ git revert'的東西中。我發現在使用Git這麼久之後學習SVN有點困難。 –
兩個例子都必須工作,但
svn merge -r UPREV:LOWREV .
撤銷範圍
svn merge -c -REV .
在這個語法撤消單一版本
- 如果當前目錄是WC及(如必須在每次合併後進行)你」 ll commit results
你想查看日誌嗎?
您是否需要在工作副本中執行此操作? – dwjohnston
@dwjohnston - 是的,合併**總是在WC **中執行,它不是服務器端任務 –
'svn:合併源所需'。沒有骰子。 – 2rs2ts
亞歷克斯,試試這個:SVN合併[WorkingFolderPath] -r 1944年:1943年
如果您使用的TortoiseSVN客戶端,它是很容易做到via the Show Log dialog。
這是迄今爲止最簡單的方法 –
這已過時。在當前版本中不再有可用於客戶端的上下文菜單。 – user1789573
什麼? TortoiseSVN是一個上下文菜單,加上它產生的對話框。 「不再有上下文菜單」是什麼意思?絕對有! – Ben
F=code.c
REV=123
svn diff -c $REV $F | patch -R -p0 \
&& svn commit -m "undid rev $REV" $F
這是唯一對我有用的東西。 –
正如它所說的那樣,以下操作將進行空運行。 HEAD是當前版本,上一個是以前的,那麼路徑到您的文件,或提交的資料:
svn merge --dry-run -rHEAD:PREV https://example.com/svn/myproject/trunk
如果空轉看起來不錯,沒有--dry運行運行命令
驗證修改並重新提交。要瀏覽的版本號嘗試:
svn log
我試過以上,(svn merge
),你是對的,但它確實插孔。然而
svn update -r <revision> <target> [-R]
似乎工作,但不是永久性的(我的svn只是顯示一箇舊的修訂版)。所以我必須
mv <target> <target backup>
svn update <target>
mv <target backup> <target>
svn commit -m "Reverted commit on <target>" <target>
在我的具體情況我的目標是interfaces/AngelInterface.php
。我對文件進行了更改,提交了它們,更新了構建計算機運行phpdoc編譯器,發現我的更改浪費時間。 svn log interfaces/AngelInterface.php
將我的更改顯示爲r22060,並且該文件上的上一次提交是r22059。所以我可以svn update -r 22059 interfaces/AngelInterface.php
和我最終的代碼,因爲它是在-r22059再次。然後: -
mv interfaces/AngelInterface.php interfaces/AngelInterface.php~
svn update interfaces/AngelInterface.php
mv interfaces/AngelInterface.php~ interfaces/AngelInterface.php
svn commit -m "reverted -r22060" interfaces/AngelInterface.php
我也可以做同樣的事情上的目錄,通過在所有上述代替interfaces/AngelInterface.php
指定. -R
。
雖然已經提出的建議可能適用於某些人,但它不適用於我的情況。執行合併時,更新爲rev 1445
的rev 1443
的用戶仍然同步1444
中更改的所有文件,即使它們等於合併中的1443
。我需要最終用戶根本看不到更新。
如果您想要完全隱藏提交,可以通過在正確的修訂版本中創建一個新分支,然後交換分支來實現。唯一的是你需要刪除並重新添加所有的鎖。
copy -r 1443 file:///<your_branch> file:///<your_branch_at_correct_rev>
svn move file:///<your_branch> file:///<backup_branch>
svn move file:///<your_branch_at_correct_rev> file:///<your_branch>
這個工作對我來說,也許會有所幫助別人那裏=)
首先,恢復工作拷貝到1943年
> svn merge -c -1943 .
其次,檢查什麼是關於被承諾。
> svn status
三,提交1945年版
> svn commit -m "Fix bad commit."
四,看新的日誌。
> svn log -l 4
------------------------------------------------------------------------
1945 | myname | 2015-04-20 19:20:51 -0700 (Mon, 20 Apr 2015) | 1 line
Fix bad commit.
------------------------------------------------------------------------
1944 | myname | 2015-04-20 19:09:58 -0700 (Mon, 20 Apr 2015) | 1 line
This is the bad commit that I made.
------------------------------------------------------------------------
1943 | myname | 2015-04-20 18:36:45 -0700 (Mon, 20 Apr 2015) | 1 line
This was a good commit.
------------------------------------------------------------------------
svn merge -c -M PATH
這救了我的命。
我遇到了同樣的問題,恢復回來後,我還沒有看到舊的代碼。 運行上述命令後,我得到了一個乾淨的舊版本代碼。
如果您想從歷史記錄中完全刪除提交,也可以在特定修訂版本中執行repo轉儲,然後導入該轉儲。具體來說:
svnrdump dump -r 1:<rev> <url> > filename.dump
svnrdump命令執行與svnadmin轉儲相同的功能,但在遠程repo上工作。
接下來只需將轉儲文件導入您選擇的回購。這已經過測試,在Beanstalk上運行良好。
你從來不接受答案,因爲他們都沒有工作? – 2rs2ts
懶惰獾的答案應該被接受。 – Jeff
如果你想要一個字面的答案,使用「svn merge -c -1944」。檢查它是否工作:「svn diff」 –