为什么我拒绝将不相关的历史消息与git

时间:2018-05-27 17:39:57

标签: git

请注意我的问题不是“我该怎么办?”,因为我已经阅读了有关堆栈溢出的其他问题。我知道我必须给出--allow-unrelated-histories参数。

我的问题是“为什么”。

以下是git版本2.17.0.windows.1所做的操作。 请注意,Linux上的git版本2.7.4不会发生此错误:

我首先在gitlab上创建一个空的存储库。 然后,我在2台不同的计算机上有2个用户:

第一位用户:

git clone <repository_url>
cd myproject
touch file1.cpp
git add file1.cpp
git commit -m "file 1 creation"
git push origin master

第二位用户:

git clone <repository_url>
cd myproject
touch file2.cpp
git add file2.cpp
git commit -m "file 2 creation"
git pull

此时,我收到此错误消息:

  

致命:拒绝合并不相关的历史

我不明白为什么我在git windows版本上有这个错误消息而不是Linux ...

由于

1 个答案:

答案 0 :(得分:4)

  

我首先创建一个空存储库

这就是问题所在。空存储库没有提交,因此当每个用户在提取空存储库后执行git commit时,他们正在创建唯一的根提交。因此,当一个推送而另一个试图拉(已经在本地进行另一个根提交)时,Git会抱怨,因为上游共享 no 提交本地副本。它们是两个完全不同的,无关的历史。

您可以通过确保在其他人提取之前创建并推送初始提交(因此每个人都拥有相同的root提交),或者使用--allow-unrelated-histories来绕过错误,从而避免这种情况。就个人而言,我认为第一种选择更好。

至于为什么两个Git安装之间存在差异:正如@Schwern评论的那样,this behavior was added in Git 2.9