在我的git存储库中,我创建了一个名为alt的新分支。经过一些工作后,似乎alt中的解决方案优于我的主分支中的解决方案,所以我想放弃master并使alt成为新的master。
C1
|
C2
/\
master -> C3 C4
|
C5 <- alt
所以我想放弃C3,但仍然将它保留在提交历史记录中供将来参考,然后返回到一个分支。最好的方法是什么?
我的第一个想法是将master移动到C5,然后将alt合并到master中。它是否正确?我是否需要先移动大师?
我也可以将master合并为alt,通过将版本保持为alt来解决所有合并冲突,然后将alt重命名为master
或者我应该将master移动到alt并简单地删除分支alt,将C3作为已停止的分支,这实际上是现实吗?
我认为这里有多种解决方案,是否有最佳实践可以遵循(总是将分支机构合并为主机与开放式机箱)?
答案 0 :(得分:4)
我认为最简单的方法是使用我们的合并策略将master合并为alt。这将创建一个新的提交C6,其树与C5完全相同,但它具有C3和C5作为父级,从而将C3保留在存储库中。
git checkout alt
git merge --strategy=ours master # perform the merge
git checkout master
git merge --ff-only alt # move master to alt
git branch -d alt # delete alt if it's not needed anymore
如果你想要一个线性历史记录,你也应该能够改变而不是合并。只需用git rebase --strategy=ours alt master
替换前两行。
请检查您输入的每个命令。我没有测试过这个。当然,git是git,如果出现问题,什么都不会丢失......