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

“refusing to merge unrelated histories” failure while pulling to recovered repository

我想出了一个关于Git Push的问题。它以前成功地工作过,但这次失败了。一开始,我在我的主人埃多克斯1〔0〕里。,然后,

  • 我用git remote add origin来说明我的romote来源,但它提醒我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'
  • 然后,有人告诉我,在我使用push之前,我应该使用git pull origin master,我就这样做了。但是,它发出了警告:fatal: refusing to merge unrelated histories
  • 我在Git中找到了一些拒绝合并无关历史的答案,但似乎不起作用。在我的问题上,它提醒了fatal: Couldn't find remote ref –allow-unrelated-histories

真的不知道怎么做…只是想推…


这不能很快得到答复。

警告:除非您知道什么是不相关的历史并确定您需要它,否则不应使用--allow-unrelated-histories标志。这项检查只是为了防止人们错误地合并无关项目时发生灾难。

据我所知,在您的案例中发生了以下情况:

您已经在某个点上克隆了一个项目1,并对点2进行了一些开发。同时,该项目已经发展到某个阶段。

enter image description here

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

氧化镁

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

现在您应该做的是从您克隆项目的远程历史中找到提交1(我假设您没有在这之后拉,如果您这样做了,那么您应该寻找您最后一次拉的提交)。然后,您应该修改您的历史记录,使其从提交1开始,然后Git将能够正确合并(例如使用pull)。

因此,步骤(假设您现在处于恢复的提交中,没有历史记录):

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

氧化镁

现在看起来您已经从1克隆了一个,然后对所有更改进行了一次提交。不管怎样,您的中间历史记录都会随着旧的.git目录丢失,但现在您可以运行git pull,它将正确合并。


尝试将更改提交到本地回购。在把他们推到Github上之前。它可以解决这个问题(我也有类似的问题)。