试图从我的 Github 存储库中提取文件: “拒绝合并不相关的历史”

我正在学习 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

顺便说一下,在本地,我在主分支(没有其他分支) :

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

试试 --allow-unrelated-histories

像 max630注释,或解释在这里 Git 拒绝合并不相关的历史

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

那就解决冲突

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

如果一端没有实质性的历史记录(也就是说,如果它只是 github 端的一个自述文件提交) ,我通常会发现手动将自述文件复制到我的本地回购中并执行 git push -f使我的版本成为新的 root 提交会更容易。

我发现它稍微没有那么复杂,不需要记住一个模糊的旗帜,并保持历史一点干净。

虽然我完全支持解决人们的工作问题,但我不认为应该把“推动力”或“允许不相关的历史”作为通用解决方案教给新用户,因为如果一个人使用它们却不明白为什么它们一开始就不能正常工作,那么它们可能会对存储库造成真正的破坏。

当您遇到这样的情况,您开始使用一个本地存储库,并希望在 GitHub 上制作一个远程程序来共享您的工作时,需要注意一些事情。

当您创建新的在线存储库时,有一个选项“使用 README 初始化此存储库”。如果您阅读了细则,它会说“如果要导入现有存储库,请跳过此步骤”

你可能勾选了那个选项。或者类似地,在尝试初始推送之前在线进行添加/提交。发生的情况是,您在每个地方创建了一个独特的提交历史,如果没有 Nevermore 的回答中提到的特殊允许(因为 git 不希望您这样操作) ,它们就无法调和。您可以遵循这里提到的一些建议,或者更简单的做法是,下次您想将一些本地文件链接到一个全新的远程时,不要选中该选项; 为初始推送保持远程干净。

参考资料: 我使用 git + hub 的第一次经历就是遇到了同样的问题,并且做了大量的学习来理解发生了什么以及为什么会发生。

在你的树枝上-说主人,拉并允许不相关的历史

git pull origin master --allow-unrelated-histories

对我有用。

当我使用 --allow-unrelated-histories时,这个命令产生了太多的冲突。有些文件里有冲突,我甚至都没处理过。为了克服 " Refusing to merge unrelated histories"错误,我使用了以下 rebase 命令:

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

在此之后,使用提交消息提交未提交的更改:

git rebase --continue

在此之后,我的工作副本与远程副本是最新的,并且我能够像以前一样推送我的更改。没有更多的不相关的历史错误,同时拉。

执行以下命令:

git pull origin master --allow-unrelated-histories

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

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

你可以走了。

在我的案例中也面临着同样的问题,尤其是在远程添加 Git 存储库之后尝试的第一个 pull 请求。 面临以下错误。

fatal: refusing to merge unrelated histories on every try

使用“允许不相关的历史”命令。

git pull origin branchname --allow-unrelated-histories