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

时间:2016-09-29 03:40:56

标签: git github

我想出了一个关于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找到了一些答案,但似乎没有用。在我的问题中,它提醒了fatal: Couldn't find remote ref –allow-unrelated-histories

真的不知道怎么办...只想推..

2 个答案:

答案 0 :(得分:75)

这不能很快回答。

警告不应使用--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 - 它将正确合并。

答案 1 :(得分:-3)

尝试将更改提交到本地存储库。在将它们推送到GITHUB之前。它可以解决问题(我有类似的问题)。