代码之家  ›  专栏  ›  技术社区  ›  Bob5421

为什么我拒绝将无关的历史信息与Git合并?

git
  •  1
  • Bob5421  · 技术社区  · 6 年前

    请注意,我的问题不是“我该怎么做?”,因为我已经阅读了有关堆栈溢出的其他问题。我知道我必须给出——允许不相关的历史参数。

    我的问题是“为什么”。

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

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

    第一个用户:

    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 回复  |  直到 6 年前
        1
  •  4
  •   Andrew Marshall    6 年前

    我首先创建一个空存储库

    问题所在。空存储库没有提交,因此当每个用户 git commit 在提取空存储库之后,它们将创建唯一的根提交。因此,当一个推动另一个试图拉动(已经 另一个 根提交本地),Git抱怨,因为上游共享 使用本地副本提交。它们是两个完全不同的、不相关的历史。

    您可以通过确保在其他人提取之前创建并推送初始提交(这样每个人都有相同的根提交)或使用 --allow-unrelated-histories 如您所述,绕过错误。就个人而言,我认为第一个选择更好。


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