svn恢复到某个版本

Subversion将文件存放在中心版本库里,这个版本库很像一个普通的文件服务器。不同的是,它可以记录每一次文件和目录的修改情况,这样就可以在需要的回滚时,将数据恢复到以前的版本,并可以查看数据的更改细节。

问题描述

假设原来的版本为 r10,我修改了工作副本,并提交,变成r11;后来又修改,提交,变成r12。

最终我发现这两次提交都有问题,如何让代码仓库中的内容恢复到r10的内容呢?(最好是放弃r11和r12,或者可以使r13的内容跟r10相同)

解决方案

$ svn merge -r 12:10 http://svn.example.com/repos/myproject/trunk -m "message"
常用操作

还原到某个版本

svn up -r 版本号
svn up -r 版本号 文件名称
还原改动

对应提交(commit),要有类似回滚(rollback)的操作。

$ svn revert
还原已提交的改动

revert只适合未提交的情况。 如果已经提交,发现问题,要回退到之前的修订版。 首先需要:

$ svn up
让本地工作拷贝更新到最新状态。 然后:

$ svn log your_file_path
查看文件日志,这时候提交时填写的说明信息就派上用场了。 查看两个修订版之间的不同:

$ svn diff -r 旧修订版序号:新修订版序号 your_file_path
决定用哪个旧的修订版号后,用旧的修订版号文件覆盖新的修订版号文件。

$ svn merge -r 新修订版序号:旧修订版序号 your_file_path
还需要:

$ svn commit -m “恢复到某修订版(某修订版作废)”
这个还原是所谓的,不是用旧的版本号替代,而是将旧文件覆盖新文件。

原文网址:http://demi-panda.com/2012/11/13/version-revert
<think>好的,我现在需要帮助用户了解如何使用SVN还原到指定版本。首先,我需要回忆一下SVN的相关命令,特别是版本回退的操作步骤。用户可能已经知道一些基本操作,比如svn revert,但想回退到某个特定版本,而不仅仅是撤销本地修改。 首先,我应该确定用户的需求。用户提到“revert svn to a specific version”,这通常指的是将工作副本或仓库回滚到某个历史版本。不过,SVN没有直接的“revert to version”命令,所以需要通过其他步骤来实现。 接下来,我需要考虑正确的步骤。通常的做法是先使用svn update将工作副本更到最,然后使用svn merge来回退到特定版本。或者,也可以使用svn checkout指定版本号,但这样可能不太方便,尤其是当需要提交回退后的版本到仓库时。 然后,我需要检查用户提供的引用内容。引用[1]和[2]提到svn revert用于撤销本地修改,而引用[3]提到使用--depth=infinity来还原整个目录。但这些都是针对未提交的更改,而不是回退到历史版本。因此,用户可能需要的是合并操作,而不仅仅是revert。 因此,正确的步骤应该是: 1. 查找目标版本版本号。 2. 使用svn merge命令将当前工作副本回退到该版本。 3. 提交这次合并,使仓库记录这次回退。 需要确保用户理解svn merge的用法,尤其是反向合并的概念。例如,如果当前版本是100,想回退到版本90,应该执行svn merge -r 100:90,这样会将100到90之间的变更撤销。 此外,用户可能还需要知道如何查看日志以确定版本号,因此需要提到svn log命令。 另外,要提醒用户在操作前备份,虽然SVN版本控制,但谨慎操作总是好的。同时,如果只是本地回退而不影响仓库,可以使用svn update -r版本号,但这样不会提交到仓库,其他人不会看到变更。 总结步骤: - 使用svn log查看版本号。 - 使用svn merge进行反向合并。 - 解决可能的冲突。 - 提交变更到仓库。 需要确保用户区分svn revert和svn merge的不同用途,避免混淆。同时,引用中的内容提到svn revert的危险性,所以在回答中需要强调正确使用merge而不是revert来达到目的。</think>### 如何将SVN还原到指定版本? 要将SVN工作副本或仓库回退到特定版本,需通过以下步骤实现: #### 1. **查看版本历史** 首先需要确定目标版本版本号。使用以下命令查看提交日志: ```bash $ svn log ``` 日志会显示所有提交记录,格式为: ``` ------------------------------------------------------------------------ r100 | user | 2023-10-01 12:00:00 +0800 (Mon, 01 Oct 2023) | 1 line 修改配置文件 ------------------------------------------------------------------------ r99 | user | 2023-09-30 15:30:00 +0800 (Sun, 30 Sep 2023) | 3 lines 增功能模块 ------------------------------------------------------------------------ ``` 记录目标版本号(例如`r99`)。 --- #### 2. **回退工作副本到指定版本** - **方法一:通过合并反向操作** 使用`svn merge`命令撤销从当前版本到目标版本之间的所有变更。假设当前版本是`r100`,需回退到`r99`: ```bash $ svn merge -r 100:99 . ``` 此命令将生成反向差异,撤销`r100`的修改,使工作副本回到`r99`的状态。 完成后需提交变更以更仓库: ```bash $ svn commit -m "回退到版本99" ``` - **方法二:直接更到指定版本** 若仅需临时查看旧版本内容(不提交到仓库),可运行: ```bash $ svn update -r 99 ``` 但此操作仅影响本地副本,不会修改仓库历史。 --- #### 3. **处理冲突** 若回退过程中出现冲突,需手动解决: ```bash $ svn resolve --accept working FILE_NAME ``` 确认文件无误后再次提交。 --- #### 注意事项 - **`svn revert`的局限性** `svn revert`仅用于撤销本地未提交的修改(如引用[1][^1]和[2][^2]所述),无法回退到历史版本。例如: ```bash $ svn revert --depth=infinity . # 仅还原当前目录的未提交更改 ``` - **备份与验证** 重要操作前建议备份工作副本,并通过`svn diff -r 99:HEAD`对比差异确保准确性。 --- ### 相关问题 1. **如何恢复SVN中误删除的文件?** 2. **SVN与Git在版本回退上的主要区别是什么?** 3. **如何永久删除SVN仓库中的敏感历史记录?** [^1]: 引用[1] : 引用[2] [^3]: 引用[3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值