Git 新分支修复 master 分支中的问题后变基或合并
Git Rebase or Merge after new branch fixes issues in master branch
我们有一个包含多个提交的主分支:
1 -> 2 -> 3 -> 4 -> 5 -> ..... -> 100
此 master 已部署到生产环境。
现在我们发现在版本 3
系统中引入了一个错误,导致版本 10, 15, 34, ...
中更多的修复是人们试图解决这个问题并由此产生新的问题。
由于一些提交很重要并且主节点已经部署,我们不能只重置回版本 3。
所以我们从版本 2(就在错误之前)创建了一个分支并按照我们的方式工作
包括已提交的相关功能:
1 -> 2 -> 3 -> 4 -> 5 -> ..... -> 100
\
A -> B -> C ...........- > Z
现在我们想采用 Z
版本并将其合并/变基为我们主人的最新版本。
同样,我们希望保留 3 到 100 的所有历史记录。
我们知道一种选择是将 A 变基到版本 100 上,另一种选择是将 Z 合并到 100 中,但我们不确定在这种情况下哪种方法更好。
为什么不记录真实发生的事情呢?您要放弃 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会主动隐瞒相关事实。任何使用伪造历史的人都不会得到帮助。
我们有一个包含多个提交的主分支:
1 -> 2 -> 3 -> 4 -> 5 -> ..... -> 100
此 master 已部署到生产环境。
现在我们发现在版本 3
系统中引入了一个错误,导致版本 10, 15, 34, ...
中更多的修复是人们试图解决这个问题并由此产生新的问题。
由于一些提交很重要并且主节点已经部署,我们不能只重置回版本 3。
所以我们从版本 2(就在错误之前)创建了一个分支并按照我们的方式工作 包括已提交的相关功能:
1 -> 2 -> 3 -> 4 -> 5 -> ..... -> 100
\
A -> B -> C ...........- > Z
现在我们想采用 Z
版本并将其合并/变基为我们主人的最新版本。
同样,我们希望保留 3 到 100 的所有历史记录。
我们知道一种选择是将 A 变基到版本 100 上,另一种选择是将 Z 合并到 100 中,但我们不确定在这种情况下哪种方法更好。
为什么不记录真实发生的事情呢?您要放弃 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会主动隐瞒相关事实。任何使用伪造历史的人都不会得到帮助。