在git rebase origin/development
期间,git:
fatal: refusing to merge unrelated histories
Error redoing merge 1234deadbeef1234deadbeef
我的git版本是2.9.0。用于在以前的版本中正常工作。
如何使用新版本中引入的强制标记继续使用此rebase,以允许不相关的历史记录?
答案 0 :(得分:2062)
自git 2.9以来,默认行为已发生变化:
" git merge"用于允许合并两个没有共同点的分支 默认情况下,这导致了现有的全新历史 项目创建,然后由一个毫无戒心的维护者拉, 这允许将不必要的并行历史合并到 现有项目。该命令已被教授不允许这样做 默认,带有转义填充
--allow-unrelated-histories
选项 用于合并两个项目历史的罕见事件 那是独立开始的。
有关详细信息,请参阅git release changelog。
您可以使用--allow-unrelated-histories
强制合并发生。
答案 1 :(得分:873)
就我而言,在远程添加git repo之后,每个特别是第一次拉取请求的错误只是fatal: refusing to merge unrelated histories
。
使用--allow-unrelated-histories
标志以这种方式处理拉取请求:
git pull origin branchname --allow-unrelated-histories
答案 2 :(得分:499)
尝试以下命令
git pull origin master --allow-unrelated-histories
这可以解决你的问题。
答案 3 :(得分:203)
首先设置本地存储库时出现此错误。然后去了github并创建了一个新的存储库。然后我跑了
git remote add origin <repository url>
当我尝试推/拉时,我得到了相同的fatal: unrelated_histories
错误。
以下是我修复它的方法:
git pull origin master --allow-unrelated-histories
git merge origin origin/master
... add and commit here...
git push origin master
答案 4 :(得分:132)
为此,请输入命令:
git pull origin branchname --allow-unrelated-histories
例如:
git pull origin master --allow-unrelated-histories
参考:
答案 5 :(得分:91)
我有同样的问题。试试这个:
git pull origin master --allow-unrelated-histories
git push origin master
答案 6 :(得分:54)
我运行了此命令,问题得到解决。1
git pull origin branchName --allow-unrelated-histories
答案 7 :(得分:49)
对于Android Studio和IntelliJ:
首先,提交所有内容并解决所有冲突。
然后从IDE的下面打开终端,然后输入:
git pull origin master --allow-unrelated-histories
现在您可以推动了。
答案 8 :(得分:42)
发生这种情况的两种可能性-
您已经克隆了一个项目,并且.git目录被删除或损坏。这会导致Git不了解您的本地历史记录,因此,当您尝试推入或拉出远程存储库时,它将导致该错误引发此错误。
您已经创建了一个新的存储库,向其中添加了一些提交,现在您正尝试从已经具有自己的提交的远程存储库中提取信息。在这种情况下,Git也会抛出错误,因为它不知道两个项目之间的关系。
解决方案
git pull origin master --allow-unrelated-histories
Ref-https://www.educative.io/edpresso/the-fatal-refusing-to-merge-unrelated-histories-git-error
答案 9 :(得分:40)
尝试git pull --rebase development
答案 10 :(得分:33)
git pull origin <branch> --allow-unrelated-histories
您将被引导至Vim Edit
git push --set-upstream origin <branch>
答案 11 :(得分:29)
由于所有其他答案均未真正回答问题,因此这是受this answer启发而解决的一个相关问题的解决方案。
所以在执行git rebase时会出错:
$ git rebase origin/development
fatal: refusing to merge unrelated histories
Error redoing merge 1234deadbeef1234deadbeef
此错误实际上并未取消变基,但您现在处于中间位置:
$ git status
interactive rebase in progress; onto 4321beefdead
Last command done (1 command done):
pick 1234deadbeef1234deadbeef test merge commit
因此,您现在可以手动进行合并。找出原始合并提交的父提交:
$ git log -1 1234deadbeef1234deadbeef
commit 1234deadbeef1234deadbeef
Merge: 111111111 222222222
Author: Hans Dampf
Date: Wed Jun 6 18:04:35 2018 +0200
test merge commit
找出两个合并父对象中的哪个是被合并到当前合并父对象中的那个(可能是第二个合并父对象,请使用git log 222222222
进行验证),然后手动进行合并,复制该合并父对象的提交消息。原始合并提交:
$ git merge --allow-unrelated 222222222 --no-commit
Automatic merge went well; stopped before committing as requested
$ git commit -C 1234deadbeef1234deadbeef
[detached HEAD 909af09ec] test merge commit
Date: Wed Jun 6 18:04:35 2018 +0200
$ git rebase --continue
Successfully rebased and updated refs/heads/test-branch.
答案 12 :(得分:26)
首先使用以下命令将远程更改拉到本地:
git pull origin branchname --allow-unrelated-histories
**在我的情况下,分支名称是master。
完成pull命令后,就会发生冲突。您应该解决冲突。我使用Android Studio解决冲突。
解决冲突后,合并就完成了!
现在您可以放心了。
答案 13 :(得分:23)
通常在您第一次提交到远程存储库时发生。 由于错误明确指出“拒绝合并无关的历史记录”,因此我们需要使用--allow-unrelated-histories标志。
git pull origin master --allow-unrelated-histories
现在会有一些冲突,我们必须手动解决。之后,只需提交代码并推送即可。
答案 14 :(得分:21)
我有同样的问题。问题很遥远,有东西阻止了这个。 我首先创建了一个本地仓库。我在本地添加了LICENSE和README.md并提交。 然后我想要一个远程仓库,所以我在Github上创建了一个仓库。 我在这里检查“使用README初始化此存储库”时犯了一个错误,该操作也创建了一个README.md。
所以现在我跑步
git push --set-upstream origin master
我知道了:
error: failed to push some refs to 'https://github.com/lokeshub/myTODs.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes
(e.g. hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
现在我克服了这个问题
git pull origin master
导致以下错误的原因
From https://github.com/lokeshub/myTODs
branch master -> FETCH_HEAD
fatal: refusing to merge unrelated histories**
我尝试过:
git pull origin master --allow-unrelated-histories
结果:
From https://github.com/lokeshub/myTODs
* branch master -> FETCH_HEAD
Auto-merging README.md
CONFLICT (add/add): Merge conflict in README.md
Automatic merge failed;
fix conflicts and then commit the result.
解决方案:
我删除了远程存储库并创建了新文件(我认为只有删除README才行),然后下面的工作便成为了
git remote rm origin
git remote add origin https://github.com/lokeshub/myTODOs.git
git push --set-upstream origin master
答案 15 :(得分:12)
我也很努力,但设法找到了解决方法。
当您遇到上述错误时,只需选择合并提交,然后继续使用rebase:
git cherry-pick -m 1 1234deadbeef1234deadbeef
git rebase --continue
答案 16 :(得分:12)
我尝试git pull --allow-unrelated-histories
无效,但是为我解决了这个问题的是:
我将桌面存储库中的所有文件复制到另一个文件夹,然后删除了该文件夹。
然后我再次克隆该仓库,因为它是一个新项目。
当我再次复制文件并将其推送时,就像魅力一样。
答案 17 :(得分:12)
在进行git pull
时,我收到了此消息fatal: refusing to merge unrelated histories
一个回购模块,其中我有一段时间没有更新本地副本了。
我运行此命令只是为了从原点刷新本地。我只是想从远程获取最新信息,而无需进行任何本地更改。
git reset --hard origin/master
这对我来说是固定的。
答案 18 :(得分:6)
对于Google员工:
如果您在GitHub上创建了新的存储库,并意外地使用README
或.gitignore
文件对其进行了初始化。
如果您发现自己由于.git
文件夹损坏而无法合并或变基。
然后:
git clone
现在,本地和远程站点将具有“相关历史记录”,并且将愉快地合并或变基。
答案 19 :(得分:6)
这对我有用:
git push origin master --force
答案 20 :(得分:6)
通过切换 allow-unrelated-histories
开关来解决错误。在 git pull 或 git merge 命令之后,添加以下标签:
git pull origin master --allow-unrelated-histories
之后可能会发生冲突。所以解决了冲突并提交。这对我有用。
答案 21 :(得分:5)
就我而言,我想将不相关的历史分支合并到当前分支:
git merge <-unrelated-history-branch-name> --allow-unrelated-histories
答案 22 :(得分:1)
因为你既不能push也不能pull-and-push也不能merge-pull-and-push:-
git add .
git commit -m 'commitName'
git branch -m master branchName
git push -f origin branchName
这对我有用。
答案 23 :(得分:0)
多年来我一直在使用rebase,但从未遇到过这样的问题。但是,您的第一个问题是,您尝试直接在名为development
的远程存储库中的远程分支origin
上执行此操作。从字面上看这是错误的,因为rebase是危险的命令,会重构git历史记录。话虽如此,您应该首先尝试在本地存储库上尝试并推送它(如果它可以按预期工作)。
因此,我通常的rebase工作流程如下所示(但请记住,您不应该在分支上使用rebase,您不是唯一的委员会。对于此类分支,请简单地使用合并和解决冲突,如果适用):
master
;作为单行命令):git checkout master && git pull origin master && git checkout development
git rebase master
git push -f origin development
正如我已经提到的,请记住,rebase操作git历史记录,这通常是一件坏事。但是,也可以在没有其他人承诺的分支上执行此操作。为了使该分支对于其他开发人员而言是可拉式的,请使用其他合并策略,例如merge本身,squash或cherrypick。因此,换句话说:Rebase不应该成为您进行分布式开发的工具。如果您是唯一在此存储库上工作的人,那么它对您来说很好。
我们使用要素分支策略。在这种情况下,我通常使用rebase以便从其他开发人员那里获取“更新”,同时发生在master分支上。这样做可以减小在拉取请求中可见的提交的大小。因此,它使代码审阅者更容易看到我在此功能分支中所做的更改。
答案 24 :(得分:0)
我看到投票最多的答案不能解决这个问题,这是在重新定级的情况下。
同步两个分开的分支的唯一方法是将它们重新合并在一起,从而产生一个额外的合并提交和两组提交,这些提交包含相同的更改(原始更改和来自您的基于重新创建分支的更改)。不用说,这是一个非常令人困惑的情况。
因此,在运行git rebase
之前,请始终问自己:“是否还有其他人在看这个分支?”如果答案是肯定的,请从键盘上放开手,然后开始考虑进行无损更改的方法(例如,git revert
命令)。否则,您可以安全地随意重写历史记录。
参考:https://www.atlassian.com/git/tutorials/merging-vs-rebasing#the-golden-rule-of-rebasing
答案 25 :(得分:0)
[Import(typeof(IProductService))]
public static IProductService ProductService { get; set; }
[Import(typeof(IProductRepository))]
public static IProductRepository ProductRepository { get; set; }
var catalog = new DirectoryCatalog(GlobalVariables.ApplicationAssemblyPath, "*.dll");
container = new CompositionContainer(catalog);
ProductRepository = container.GetExportedValue<IProductRepository>();
ProductService = container.GetExportedValue<IProductService>();
时出现错误:
git pull origin master
fatal: refusing to merge unrelated histories