Git用不相关的历史替换master分支

时间:2017-04-06 01:52:31

标签: git github merge

我的存储库中有两个分支:master和devel。我尝试将devel合并到master中但得到了错误fatal: refusing to merge unrelated histories

在github上,master分支包含一些我不关心但不需要合并的文件。我不需要保留master分支的历史记录,我只是想用devel上的东西替换master。

一旦我将devel更新为master,我需要告诉我的合作伙伴如何在没有合并到他的旧本地副本的情况下拉大师。

我正在考虑的是使用this发布并运行的建议:

git branch -m master old-master
git branch -m devel master
git push -f origin master
git branch -d old-master

你认为这会有效吗?我应该告诉我的合作伙伴,为了让他在完成后获得最新的主副本,我应该怎么做?

2 个答案:

答案 0 :(得分:1)

自git 2.9以来,默认行为已发生变化:

  

“git merge”用于合并两个没有共同点的分支   默认情况下,这导致了现有的全新历史   项目创建,然后由一个毫无戒心的维护者拉,   这允许将不必要的并行历史合并到现有的中   项目。已经教导该命令默认不允许这样做,   使用逃生舱口--allow-unrelated-histories选项   一个罕见的事件,它合并了两个开始他们的项目的历史   独立生活。

有关详细信息,请参阅git release changelog

您可以使用--allow-unrelated-histories强制合并发生。

示例: git pull origin branchname --allow-unrelated-histories

答案 1 :(得分:1)

你在这里遇到了一个混乱的局面 假设您的分支机构更换顺利,您需要询问您的合作伙伴是否有他希望不做任何改动的更改。

  • 如果他没有改变,我会建议克隆远程存储库和 从新鲜开始。
  • 如果您的合作伙伴有更改,我建议您制作一个区域设置分支的副本,然后选择更改。

合作伙伴:

git checkout –b master_tmp master
git checkout master_tmp
git branch –D master
git fecth
git checkout master
#Locate the changes you are missing 
git log  master_tmp
git cherry pick sha1x…sha1y # look at the documentation of cherry pick.
#Resolve conflicts as usual  
git commit 
git push