svn 还原发生多次提交的提交
svn revert a commit that happened more than a few commits back
所以我环顾四周,没有看到我的具体示例。希望这是有道理的-
我正在寻找一种方法来删除文件中发生的更改但在一次提交中并保留之后发生的更改(直到 HEAD)。
例如
第一次提交foo.js
var x = "hello";
console.log(x);
第二次提交foo.js
var x = "hello";
var y = "blah";
console.log(x);
console.log(y);
第三次提交 foo.js
var x = "hello";
var y = "blah";
console.log(x);
console.log(y);
var z = "world";
第 4 次提交(HEAD)foo.js
var x = "hello";
var y = "blah";
console.log(x);
console.log(y);
var z = "world";
console.log(x + " " + z);
现在我想还原第二次提交,使文件看起来像
var x = "hello";
console.log(x);
var z = "world";
console.log(x + " " + z);
有什么建议吗?我希望通过还原而不是手动来执行此操作(删除文件中的行并提交)
我试过了(How do I revert an SVN commit?)
//svn merge -c -[R] .
svn merge -c -2 foo.js
并且它在提交 2
之后删除了所有更改
- 你做对了所有事情
- 对于这样的 "one-liners" 你不能在没有冲突的情况下反向合并(而且我在你的消息中看不到任何迹象),必须 解决(可能是手工)
- 如果你使用古老的 SVN 版本,可能会让你更加头疼
- 如果任何情况clean reverse merge不能影响任何修订,不包括在合并范围内- desing 的反向合并正在应用reversed patch 来自有问题的修订仅
在我的仓库中使用您的数据进行示例测试
>svn log
------------------------------------------------------------------------
r5 | Badger | 2015-02-01 12:03:39 +0500 (Вс, 01 фев 2015) | 1 line
Change 3
------------------------------------------------------------------------
r4 | Badger | 2015-02-01 12:03:00 +0500 (Вс, 01 фев 2015) | 1 line
Change 2
------------------------------------------------------------------------
r3 | Badger | 2015-02-01 12:02:02 +0500 (Вс, 01 фев 2015) | 1 line
Change 1
------------------------------------------------------------------------
r2 | Badger | 2015-02-01 12:01:22 +0500 (Вс, 01 фев 2015) | 1 line
Initial state
------------------------------------------------------------------------
r1 | Badger | 2015-02-01 12:00:01 +0500 (Вс, 01 фев 2015) | 1 line
Imported folder structure
------------------------------------------------------------------------
如您所见,您的更改在我的 r3 中
>svn diff -c 3
Index: foo.js
===================================================================
--- foo.js (revision 2)
+++ foo.js (revision 3)
@@ -1,2 +1,4 @@
var x = "hello";
+var y = "blah";
console.log(x);
+console.log(y);
和HEAD-state
>svn cat foo.js
var x = "hello";
var y = "blah";
console.log(x);
console.log(y);
var z = "world";
console.log(x + " " + z);
我不能 reverse-merge 它没有冲突(差异是 context-aware)(我的回购协议是 single-file,因此我可以使用 .
)
>svn merge -c -3 .
--- Reverse-merging r3 into '.':
C foo.js
--- Recording mergeinfo for reverse merge of r3 into '.':
G .
Conflict discovered in file 'foo.js'.
Select: (p) postpone, (df) show diff, (e) edit file, (m) merge,
(mc) my side of conflict, (tc) their side of conflict,
(s) show all options
对于此类冲突,最佳策略可能是使用任何pre-configuredGUI-tool
合并
或编辑文件in-place(你知道,你想要得到哪个结果)
所以我环顾四周,没有看到我的具体示例。希望这是有道理的-
我正在寻找一种方法来删除文件中发生的更改但在一次提交中并保留之后发生的更改(直到 HEAD)。
例如
第一次提交foo.js
var x = "hello";
console.log(x);
第二次提交foo.js
var x = "hello";
var y = "blah";
console.log(x);
console.log(y);
第三次提交 foo.js
var x = "hello";
var y = "blah";
console.log(x);
console.log(y);
var z = "world";
第 4 次提交(HEAD)foo.js
var x = "hello";
var y = "blah";
console.log(x);
console.log(y);
var z = "world";
console.log(x + " " + z);
现在我想还原第二次提交,使文件看起来像
var x = "hello";
console.log(x);
var z = "world";
console.log(x + " " + z);
有什么建议吗?我希望通过还原而不是手动来执行此操作(删除文件中的行并提交)
我试过了(How do I revert an SVN commit?)
//svn merge -c -[R] .
svn merge -c -2 foo.js
并且它在提交 2
之后删除了所有更改- 你做对了所有事情
- 对于这样的 "one-liners" 你不能在没有冲突的情况下反向合并(而且我在你的消息中看不到任何迹象),必须 解决(可能是手工)
- 如果你使用古老的 SVN 版本,可能会让你更加头疼
- 如果任何情况clean reverse merge不能影响任何修订,不包括在合并范围内- desing 的反向合并正在应用reversed patch 来自有问题的修订仅
在我的仓库中使用您的数据进行示例测试
>svn log
------------------------------------------------------------------------
r5 | Badger | 2015-02-01 12:03:39 +0500 (Вс, 01 фев 2015) | 1 line
Change 3
------------------------------------------------------------------------
r4 | Badger | 2015-02-01 12:03:00 +0500 (Вс, 01 фев 2015) | 1 line
Change 2
------------------------------------------------------------------------
r3 | Badger | 2015-02-01 12:02:02 +0500 (Вс, 01 фев 2015) | 1 line
Change 1
------------------------------------------------------------------------
r2 | Badger | 2015-02-01 12:01:22 +0500 (Вс, 01 фев 2015) | 1 line
Initial state
------------------------------------------------------------------------
r1 | Badger | 2015-02-01 12:00:01 +0500 (Вс, 01 фев 2015) | 1 line
Imported folder structure
------------------------------------------------------------------------
如您所见,您的更改在我的 r3 中
>svn diff -c 3
Index: foo.js
===================================================================
--- foo.js (revision 2)
+++ foo.js (revision 3)
@@ -1,2 +1,4 @@
var x = "hello";
+var y = "blah";
console.log(x);
+console.log(y);
和HEAD-state
>svn cat foo.js
var x = "hello";
var y = "blah";
console.log(x);
console.log(y);
var z = "world";
console.log(x + " " + z);
我不能 reverse-merge 它没有冲突(差异是 context-aware)(我的回购协议是 single-file,因此我可以使用 .
)
>svn merge -c -3 .
--- Reverse-merging r3 into '.':
C foo.js
--- Recording mergeinfo for reverse merge of r3 into '.':
G .
Conflict discovered in file 'foo.js'.
Select: (p) postpone, (df) show diff, (e) edit file, (m) merge,
(mc) my side of conflict, (tc) their side of conflict,
(s) show all options
对于此类冲突,最佳策略可能是使用任何pre-configuredGUI-tool
合并或编辑文件in-place(你知道,你想要得到哪个结果)