2017-04-06 107 views
0

我在我的仓库两个分支:master和devel的。我试图合并devel到主,但得到了错误fatal: refusing to merge unrelated histories的Git替代主分支与无关的历史

在GitHub上,主分支包含了我不关心,并不需要合并一些文件。我不需要保留主分支的历史,我只是想用发展中的东西取代主。

一旦我得到devel的更新,以主,我要告诉我的伙伴怎么拉主没有融入主人的他的老本地副本。

我正在考虑从this后和运行使用的建议做:

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

你认为这是否行得通呢?我应该告诉我的伴侣,让他在完成这件事后获得最新版本的副本?

回答

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 
+0

支路替换进行得很顺利。我的搭档没有从他身边提交。他做git fetch有什么问题,然后git reset --hard origin/master? – Casey

+0

你可以试试它,但为什么不安全地玩,并避免一些后来意想不到的伏都教。如果您不想克隆,可以使用-D和checkout删除主。 –

+0

那么运行git branch -D master,然后git fetch,git checkout master? – Casey

1

因为混帐2.9的默认行为已更改:用于允许合并结果表明,在默认情况下没有共同 基地,这导致现有 项目的一个全新的历史两个分支

“混帐合并”创建,然后被一个不知情的维护者拉动,这允许将不必要的并行历史合并到现有的 项目中。命令已被教导不是默认, 在 使用的是合并独立地开始了他们的生活 两个项目的历史罕见的事件的逃生舱口--allow无关,历史的选择,让这一点。

查看git release changelog了解更多信息。

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

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