“拒绝合并不相关的历史”失败,同时拉回到恢复的存储库

问题描述 投票:23回答:2

我想出了一个关于Git push的问题。

它之前成功运行,但这次失败了。一开始,我在我的主人MINGW64 /d/javasoft/apache-tomcat-7.0.70/webapps/MyNote (master),然后,

  • 我使用git remote add origin来关联我的远程起源,但它警告fatal: remote origin already exists.
  • 然后,我使用git remote rm origin(有人告诉我),这没关系。
  • 然后,我再次使用git remote add origin https://github.com/***/***.git。没关系。
  • 然后,我使用git push -u origin master(我尝试了git push origin master,但我之前由于某种原因丢失了我当地的整个.git,所以我想这可能是第一次推,我应该添加-u)。但是,它警告error: failed to push some refs to 'https://github.com/***/***.git'
  • 然后,有人告诉我,在使用git pull origin master之前我应该​​使用push,我就这么做了。但它提醒:fatal: refusing to merge unrelated histories
  • 我在Git refusing to merge unrelated histories on rebase找到了一些答案,但它似乎没有用。在我的问题中,它警告fatal: Couldn't find remote ref –allow-unrelated-histories

我真的不知道该怎么做......我只想推......

git github
2个回答
76
投票

这不能很快回答。

警告:您不应使用--allow-unrelated-histories标志,除非您知道不相关的历史记录并且确定您需要它。引入支票只是为了防止人们错误地合并无关项目时的灾难。

据我了解,在您的情况下发生了以下情况:

你已经在某个点1克隆了一个项目,并进行了一些开发以指向2。与此同时,项目已经发展到某种程度上3

Enter image description here

然后你出于某种原因丢失了你当地的.git子目录 - 其中包含你从12的所有历史记录。您设法恢复当前状态。

Enter image description here

但现在它没有任何历史 - 看起来整个项目无处不在。如果你要求Git合并它们,它将无法说明你的更改在哪里,所以它可以将它们添加到远程项目,据我所知,它只会报告大量的添加/添加冲突。

您现在应该从您已克隆项目的远程历史中找回提交1(我假设您之后没有提取;如果您这样做,那么您应该寻找最后提交的提交)。然后你应该修改你的历史记录,以便从那个提交1开始,然后Git将能够正确合并(例如拉动)。

所以,这些步骤(假设你现在处于没有历史记录的恢复提交中):

  • 根据提交时间,估计你从某些1克隆的提交1?在哪里
  • 运行git diff _1?_..HEAD,仔细阅读。确保差异仅包含您所做的编辑。如果它包含更多,那么你应该选择一个错误的1?并需要调整它并重复这一步
  • 在你找到提交1之后。你应该把它作为你的父母;做git --reset --soft _1_,然后git commit

Enter image description here

现在看起来你已经从1克隆了,然后用你所有的改变做了一次提交。无论如何,使用旧的.git目录丢失了您的中间历史记录,但现在您可以运行git pull - 它将正确合并。


-3
投票

尝试将更改提交到本地存储库,然后再将它们推送到GitHub。

它可以解决问题(我有类似的问题)。

© www.soinside.com 2019 - 2024. All rights reserved.