Git 用一个孤立分支重写master,但保留历史

Git 用一个孤立分支重写master,但保留历史,git,Git,在我的项目中,我从master分支中的许多提交开始。在几次发布之后,我意识到我所采取的方法可能根本不是我们想要的 新方法需要完全重写代码,所以我决定从孤立分支开始(a-new-start-branch)。我喜欢它,最终,它成为了我事实上的主要分支。现在我想用a-new-start替换master 我发现,但当按照此处显示的步骤操作时,我收到错误消息致命:拒绝合并不相关的历史记录。我知道我可以使用–allow unrelated history选项,但我不太明白它的作用,也不想破坏东西 我也找到了

在我的项目中,我从
master
分支中的许多提交开始。在几次发布之后,我意识到我所采取的方法可能根本不是我们想要的

新方法需要完全重写代码,所以我决定从孤立分支开始(
a-new-start-branch
)。我喜欢它,最终,它成为了我事实上的主要分支。现在我想用
a-new-start
替换
master

我发现,但当按照此处显示的步骤操作时,我收到错误消息
致命:拒绝合并不相关的历史记录
。我知道我可以使用
–allow unrelated history
选项,但我不太明白它的作用,也不想破坏东西

我也找到了,但我不想删除主分支中的历史记录

理想情况下,我希望以直系历史结束,但如果不可能的话,我也会很乐意进行某种合并


任何想法都将不胜感激

您是否尝试在新分支中对母版重定基址

1-
$git checkout a-new-start-branch

2-
$git重新基址主节点


您的新分支现在包含
a-new-start-branch
master

分支的历史记录,我不明白您为什么要用
a-new-start
分支保留当前
master
分支的当前历史记录

如果您的目标只是让一个名为
master
的分支具有
a-new-start
分支的历史记录,您可以这样执行:

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

这样,您将在本地和远程更新分支。

正如您所说,您可以使用
——允许不相关的历史记录。此选项允许在没有常见提交时合并数据。在这种情况下,这似乎是我们更好的解决方案

我们可以这样做:

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\u branch^
检查合并是否正常。Diff应该为空