在我的项目中,我首先在master
分支中进行了很多提交。经过几次发布,我意识到我所采用的方法可能根本不是我们想要的。
新方法需要完整的代码重写,因此我决定从一个孤立的分支(a-new-beginning-branch
)开始。我喜欢它,并最终成为了我的实际主分支。现在,我想将master
替换为a-new-beginning
。
我找到了how to make the current Git branch a master branch,但是按照此处显示的步骤操作时,我收到了错误消息fatal: refusing to merge unrelated histories
。我知道我可以使用–allow-unrelated-histories
选项,但我不太了解它的作用,也不想破坏事情。
我也找到了how to overwrite the master branch with a orphan branch,但是我不想删除我的master分支中的历史记录。
理想情况下,我想结束一个线性历史,但是如果不可能,我也会对某种合并感到满意。
任何想法将不胜感激!
答案 0 :(得分:2)
我不明白您为什么要与您的master
一起保留当前a-new-beginning
分支的当前历史记录。
如果您的目标只是拥有一个名为master
的分支机构,并且该分支机构具有您的a-new-beginning
分支的历史记录,则可以通过以下方式执行该操作:
git branch -m master master-backup
git push origin :master master-backup
git branch -m a-new-beginning master
git push origin :a-new-beginning master
这样,您将在本地和远程更新分支。
答案 1 :(得分:0)
您是否尝试在新分支中重新设置 master ?
1- $ git checkout a-new-beginning-branch
2- $ git rebase master
您的新分支现在同时包含a-new-beginning-branch
和master
分支的历史记录
答案 2 :(得分:0)
您已经说过可以使用--allow-unrelated-histories
。此选项允许在不常见提交的情况下合并数据。在这种情况下,how to make the current git branch a master branch discussion似乎是我们更好的解决方案。
然后我们可以做:
git checkout better_branch
git merge --allow-unrelated-histories --strategy=ours master # keep the content of this branch, but record a merge
git checkout master
git merge better_branch # fast-forward master up to the merge
拳头合并后,与老主人的新分支将获得相关的历史记录。 第二次合并将新的分支数据用作主数据。
您可以使用git diff master..better_branch^
检查合并是否正常。差异应为空。