svn-如何提交更改”;在两次修订之间;? 问题是:

svn-如何提交更改”;在两次修订之间;? 问题是:,svn,branch,branching-and-merging,cherry-pick,Svn,Branch,Branching And Merging,Cherry Pick,如何在“两次修订之间”提交更改? 我使用引号是因为很明显,您无法在两个修订之间提交任何内容——它们已经在存储库中了 说来话长,我为什么需要这个? 这个问题一开始可能听起来很尴尬,但这是我在工作中遇到的一个现实生活场景。 我们正在将开发时的更改提交给开发分支(或“功能分支”,我们也称之为fb),工作完成后,我们将合并到主干中。 你知道,基本的工作流程。 我们从trunk发布软件,并同意在实际发布前的特定日期冻结代码。 现在,我愚蠢到相信我们从trunk构建的候选发布版本(RC)是好的,因为在我们实

如何在“两次修订之间”提交更改?
我使用引号是因为很明显,您无法在两个修订之间提交任何内容——它们已经在存储库中了

说来话长,我为什么需要这个? 这个问题一开始可能听起来很尴尬,但这是我在工作中遇到的一个现实生活场景。
我们正在将开发时的更改提交给开发分支(或“功能分支”,我们也称之为fb),工作完成后,我们将合并到主干中。
你知道,基本的工作流程。
我们从trunk发布软件,并同意在实际发布前的特定日期冻结代码。
现在,我愚蠢到相信我们从trunk构建的候选发布版本(RC)是好的,因为在我们实际发布软件之前,所有的自动化测试都已经通过并提交了一个到trunk的合并。并删除了功能分支。
假设候选版本在修订版42中,我们发布的软件版本是v1.0.3。因此,r42是v1.0.3版本的RC。
所以,RC看起来不错,但在我们发布SW之前,我将r43提交给trunk。CI中的所有测试都通过了,所以我去删除了分支fb14(第44版)。
事实证明,RC毕竟不好,需要修复,但v1.0.3不能包含功能14(在fb14中实现),即r43

以一种图解的形式:

==r42=======r43
      ^    /
      |   /
      | fb14
      |
commit fix there to get new RC
所以我需要把r42带回来,做点什么,然后把r43带回来

好的,这很简单,对吗?回滚到r42:

svn merge -r HEAD:42 .
svn commit -m "Reverted back to RC of v1.0.3"
实施所需的修复和

svn commit -m "Fixed b0rken feature for v1.0.3"
然后我们将发布软件,我将带来r43:

svn up
svn merge -c 43 .
但是等等,这没什么用!我去删除了fb14分支,所以我需要从svn中挖掘出来,并将其重新合并到主干中吗?我一定要设法把r43带回来

所以我有点想要这个:

    roll back to r42
     -------------
    /             \
==r42=====r43=====r45=====r46=====r47
         /   \            ^      /
   merge/     \           |     /
       /       \         fix   /                   
     fb14       \             /
        |        -------------
        |        bring back changes from r43
        |
     deleted in r44
编辑:Boo,他在回答自己的问题
阅读
如果/当我再次遇到类似情况时,我想在以后查找此信息。

Anwser 解释 为什么

没有在后备箱中工作?
因为血统。
假设r43中的更改进入文件foo.cpp
svn merge
记录祖先,这是最基本的东西。有了祖先,我们知道如何追溯到旧版本。对吗?
所以在提交43版foo时。cpp@42成为福的祖先。cpp@43. 然后,我又回到了r42,提交了r44和foo。cpp@43成为福的祖先。cpp@44.
现在是第45版,我想合并第43版。但我有福。cpp@44正在从foo合并。cpp@42与foo的基本合并也是如此。cpp@43给福。cpp@45祖先会搞砸的。
为了得到福。cpp@43成为福。cpp@45我需要忽略祖先

进一步阅读

当然,通过从地下墓穴挖掘分支fb14并与主干进行另一次合并,也可以实现同样的效果:

      roll back to r42
    ----------------
   /                \
--r42-----r43-----r45-----r46-----r47
         /                ^      /
        /                 |     /
       /                 fix   /                   
merge fb14---                 /
             \           merge fb14
            delete fb14       
i、 e。 (第43版)

像你以前从未编码过一样编码,我们需要立即修复

svn commit -m "Fixed b0rken feature for v1.0.3"
启动CI机器以构建软件包并发布软件

svn cp ^/branches/fb14@43 ^/branches/fb14-2
svn up
svn merge --reintegrate ^/branches/fb14-2
svn commit -m "Introducing feature 14"
svn rm ^/branches/fb14-2
但我不喜欢这种方法,所以我读了有关高级合并的文章。;)

      roll back to r42
    ----------------
   /                \
--r42-----r43-----r45-----r46-----r47
         /                ^      /
        /                 |     /
       /                 fix   /                   
merge fb14---                 /
             \           merge fb14
            delete fb14       
svn merge -r HEAD:42 .
svn commit -m "Reverted back to RC1 of v1.0.3"
svn commit -m "Fixed b0rken feature for v1.0.3"
svn cp ^/branches/fb14@43 ^/branches/fb14-2
svn up
svn merge --reintegrate ^/branches/fb14-2
svn commit -m "Introducing feature 14"
svn rm ^/branches/fb14-2