我已经找到了如何恢复一个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” –