我们有一个包含多个提交的主分支:
1 -> 2 -> 3 -> 4 -> 5 -> ..... -> 100
此主人已部署到制作中。
现在我们发现在版本3
中,系统引入了一个错误,导致版本10, 15, 34, ...
中的更多修复程序被人们试图解决问题并由此产生新问题。
由于某些提交很重要,而且由于已经部署了主服务器,因此我们无法重置为第3版。
所以我们从版本2(在错误之前)创建了一个分支并按照我们的方式工作 包括已提交的相关功能:
1 -> 2 -> 3 -> 4 -> 5 -> ..... -> 100
\
A -> B -> C ...........- > Z
现在我们想采用Z
版本并合并/重新定义它作为我们主人的最新版本。
同样,我们希望保留3到100的所有历史记录。
我们知道一个选项是在版本100上重新定义A而另一个选项将Z合并为100,但我们不确定在这种情况下什么是更好的方法。
答案 0 :(得分:1)
为什么不记录真正发生的事情?你放弃了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,54,100投入生产,然后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
或者更加彻底歪曲历史的rebase将积极隐瞒相关事实。任何使用伪造历史的人都不会得到帮助。