用孤立的分支重写master但保留历史

时间:2019-01-18 08:44:31

标签: git

在我的项目中,我首先在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分支中的历史记录。

理想情况下,我想结束一个线性历史,但是如果不可能,我也会对某种合并感到满意。

git workflow

任何想法将不胜感激!

3 个答案:

答案 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-branchmaster分支的历史记录

答案 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^检查合并是否正常。差异应为空。