尝试从我的Github存储库中提取文件:“拒绝合并无关的历史记录”


151

我正在学习git,并且正在关注Git社区书籍。

以前(很久以前),我在Github上建立了一些文件的公共存储库。现在,我在当前计算机上建立了本地Git存储库,并提交了一些文件。然后,我向Github页面添加了一个远程指向:

[root@osboxes c]# git remote add learnc https://github.com/michaelklachko/Learning-C

那似乎很成功:

[root@osboxes c]# git remote show learnc
* remote learnc
  Fetch URL: https://github.com/michaelklachko/Learning-C
  Push  URL: https://github.com/michaelklachko/Learning-C
  HEAD branch: master
  Remote branch:
    master tracked
  Local ref configured for 'git push':
    master pushes to master (local out of date)

现在我想将文件从我的Github存储库下载到我的计算机。我这样做:

[root@osboxes c]# git fetch learnc
[root@osboxes c]# git merge learnc/master
warning: refname 'learnc/master' is ambiguous.
Already up-to-date.

但是,我在本地目录中看不到任何新文件。我怎样才能得到它们?

我也尝试这样做:

[root@osboxes c]# git pull learnc master
From https://github.com/michaelklachko/Learning-C
 * branch            master     -> FETCH_HEAD
fatal: refusing to merge unrelated histories

顺便说一句,在本地我在master分支上(没有其他分支):

[root@osboxes c]# git status
On branch master
nothing to commit, working directory clean

4
设置本地存储库时,您是克隆了Github存储库还是只是克隆了git init?在后一种情况下,这些存储库是无关的(没有共同的提交),并且您无法合并它们(拉取为fetch + merge)。
保罗

我做了git init。那我应该克隆我的Github存储库来解决这个问题吗?
MichaelSB

1
您可以克隆您的Github存储库并继续使用它,但是它仍然是单独的存储库。您要合并两个不相关的历史吗?
保罗

我想我想合并历史记录,但实际上我只想在本地和github上合并文件。我的意思是我并不真正在意Github上旧文件的历史记录。
MichaelSB

Answers:



98
git checkout master
git merge origin/master --allow-unrelated-histories

解决冲突,然后

git add -A .
git commit -m "Upload"
git push

1
感谢您阐述上述解决方案。
拉胡尔·拉吉

39

尽管我全力以赴地阻止人们的工作问题,但我认为不应将“ push --force”或“ --allow_unrelated_histories”作为一般解决方案来教给新用户,因为当新用户使用它们时,它们可能对存储库造成真正的破坏一开始就不明白为什么事情不起作用。

当您遇到这样的情况时,您需要从本地存储库开始,并想在GitHub上创建一个远程共享您的工作,那么请注意。

创建新的在线存储库时,有一个选项“使用自述文件初始化此存储库”。如果您阅读精美的印刷品,则显示“如果要导入现有存储库,请跳过此步骤”。

您可能已经选中了该框。或类似地,您在尝试初始推送之前在线进行了添加/提交。发生的情况是您在每个地方创建了一个唯一的提交历史记录,如果没有Nevermore的答案中提到的特殊津贴(因为git不想让您那样操作),则无法对它们进行协调。您可以遵循此处提到的一些建议,或更简单的方法是,下次您要将某些本地文件链接到全新的遥控器时,不要检查该选项。保持遥控器清洁,以便进行最初的推动。

参考:我对git + hub的初次体验是遇到了同样的问题,并做了很多学习来了解发生了什么以及为什么。


12

如果一端没有大量的历史记录(又名github端只有一个自述提交),我通常会发现手动将自述文件复制到本地存储库并执行a git push -f来使我的版本成为新的根提交更加容易。

我发现它不太复杂,不需要记住一个晦涩的标志,并且使历史记录更加清晰。


11

在您的分支机构上-说出主人,拉扯并允许不相关的历史记录

git pull origin master --allow-unrelated-histories

为我工作。


1
您需要在Github中创建原始存储库时同意添加许可证或自述文件的命令。
F1Linux

4

执行以下命令:

git pull origin master --allow-unrelated-histories

合并vim将打开。添加一些合并消息,然后:

  1. 按ESC
  2. 按Shift +';'
  3. 按“ w”,然后按“ q”。

而且你很好。


3

当我使用时--allow-unrelated-histories,此命令产生了太多冲突。我什至没有处理文件中的冲突。为了克服该错误" Refusing to merge unrelated histories",我使用了以下rebase命令:

git pull --rebase=preserve --allow-unrelated-histories

提交之后,未提交的更改将带有提交消息。最后,运行以下命令:

git rebase --continue

此后,我的工作副本与远程副本是最新的,因此我能够像以前一样推送更改。拉取时不再有无关的历史记录错误。


1
实际的版本:git pull --rebase=merge --allow-unrelated-histories--rebase=preserve已被弃用git-scm.com/docs/git-pull#Documentation/...
Luckylooke

0

就我而言,也面临着相同的问题,尤其是在远程添加Git存储库后尝试的第一个请求请求。面临以下错误。

fatal: refusing to merge unrelated histories on every try

使用--allow-unrelated-histories命令。它完美地工作。

git pull origin branchname --allow-unrelated-histories
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.