Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash svn还原发生多次提交的提交_Bash_Svn_Version Control - Fatal编程技术网

Bash svn还原发生多次提交的提交

Bash svn还原发生多次提交的提交,bash,svn,version-control,Bash,Svn,Version Control,所以我环顾四周,没有看到我的具体例子。希望这是有意义的- 我正在寻找一种方法来删除一个文件中发生的更改,但在一次提交中,并保留之后发生的更改(所有更改都保留到HEAD) 比如说 第一次提交foo.js var x = "hello"; console.log(x); var x = "hello"; var y = "blah"; console.log(x); console.log(y); var x = "hello"; var y = "blah"; console.log(x);

所以我环顾四周,没有看到我的具体例子。希望这是有意义的-

我正在寻找一种方法来删除一个文件中发生的更改,但在一次提交中,并保留之后发生的更改(所有更改都保留到HEAD)

比如说

第一次提交foo.js

var x = "hello";
console.log(x);
var x = "hello";
var y = "blah";
console.log(x);
console.log(y);
var x = "hello";
var y = "blah";
console.log(x);
console.log(y);
var z = "world";
第二次提交foo.js

var x = "hello";
console.log(x);
var x = "hello";
var y = "blah";
console.log(x);
console.log(y);
var x = "hello";
var y = "blah";
console.log(x);
console.log(y);
var z = "world";
第三次提交foo.js

var x = "hello";
console.log(x);
var x = "hello";
var y = "blah";
console.log(x);
console.log(y);
var x = "hello";
var y = "blah";
console.log(x);
console.log(y);
var z = "world";
第四次提交(头)foo.js

现在我想恢复第二次提交,使文件看起来像

var x = "hello";
console.log(x);
var z = "world";
console.log(x + " " + z);
有什么建议给我吗?我希望通过还原来实现这一点,而不是手动(删除文件中的行并提交该行)

我试过()

在提交2之后,它消除了所有的更改

  • 你做的一切都是对的
  • 对于这样的“一行程序”,您无法在没有冲突的情况下进行反向合并(我在您的邮件中看不到任何冲突迹象),这必须解决(可能是手动解决)
  • 如果你使用古老的SVN版本,它会让你更加头疼
  • 如果任何情况下,干净的反向合并不会影响任何修订,不包括在合并范围内-通过设计反向合并仅适用于相关修订的反向补丁
  • 使用您的数据在我的回购协议中进行样本测试

    >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);
    
    有头国家

    >svn cat foo.js
    var x = "hello";
    var y = "blah";
    console.log(x);
    console.log(y);
    var z = "world";
    console.log(x + " " + z);
    
    我不能在没有冲突的情况下反向合并它(diff是上下文感知的)(我的repo是单个文件,因此我可以使用

    对于这种冲突,最好的策略可能是使用任何预先配置的GUI工具进行合并


    或者就地编辑文件(您知道,您希望得到哪个结果)

    无法有选择地将文件的一部分恢复到以前的版本,而不会丢失以后的更改。SVN如何才能确定你想要保留的每一版本的哪一行以及你想要丢弃的哪一行?是的,我的意思是,这就是为什么我以“希望这是有意义的”开头我觉得这可能是不可能的,但我想知道是否有某种技巧/黑客可以做到这一点,你知道这在git中是否可行吗?不,因为git也不能读懂你的心思。虽然我听说在(遥远的)未来的路线图中,还没有风投可以读心术。这不是真正的“读心术”--我不确定你怎么会认为这是一项不可能完成的任务,我相信有人能解决这个问题