代码之家  ›  专栏  ›  技术社区  ›  riorio

新分支修复主分支中的问题后,git重新定位或合并

  •  0
  • riorio  · 技术社区  · 7 年前

    我们有一个主分支,有几个承诺:

    1 -> 2 -> 3 -> 4 -> 5 -> ..... -> 100
    

    此主控形状已部署到生产中。

    现在我们发现在版本中 3 系统中引入了一个错误,导致在版本中进行了更多的修复 10, 15, 34, ... 如果人们试图解决这个问题并由此产生新的问题。

    由于一些提交是重要的,而且主服务器已经部署,我们不能仅仅重置回版本3。

    所以我们从版本2(就在bug之前)创建了一个分支并按照我们的方式工作 要包含已提交的相关功能,请执行以下操作:

    1 -> 2 -> 3 -> 4 -> 5 -> ..... -> 100
          \
             A -> B -> C ...........- > Z
    

    现在我们喜欢 Z 版本和合并/重新定位它作为我们的主人的最新版本。 再说一次,我们喜欢把3年的历史保留到100年。

    我们知道一种方法是在版本100上重新调整a,另一种方法是将z合并到100中,但是我们不确定在这种情况下什么是更好的方法。

    1 回复  |  直到 7 年前
        1
  •  1
  •   jthill    7 年前

    为什么不记录下真正发生的事情?您将放弃3..100系列而改用A..Z系列,因此请记录:

    git tag -m "3 was so bad we abandoned the branch here" abandoned-master master
    git checkout -B master better-version
    

    生产

    ... 1---2---3 ... 100   abandoned-master
             \
              A---B ... Z   master
    

    如果您的生产环境对投入生产的提交保持了正确的日志,那么任何查看它们和git历史的人都会确切地看到发生了什么:投入生产的提交是3,10,54100,然后z投入生产。很清楚这里发生了什么。

    添加谎言

    # as above, then
    git merge -s ours -m "not really a merge, ^2 is abandoned history" master@{1}
    
    ... 1---2---3 ... 100     abandoned-master
             \           \
              A---B...Z---*   master
    

    或者,更彻底地歪曲历史的回扣,会积极地掩盖相关事实。任何人使用伪造的历史都不会得到帮助。