前叉不能从它的上游远程撤出:“致命:拒绝合并无关的历史记录”

时间:2018-08-14 17:58:42

标签: git

注意:这与其他类似问题无关,答案是“ git merge origin / master --allow-unrelated-histories”。请不要将其标记为重复项。由于子树中的错误已在很久以前修复,因此它也不是相同错误消息的克隆。

历史是相关的,那是叉子!

这是我执行的步骤:

  1. 使用github ui将github上的一个仓库分叉到我自己的github仓库中。
  2. 因此在本地克隆存储库:
    1. git clone -b开发https://github.com/me/aproject.git
  3. 现在有人对我创建的原始回购表单进行了一些更改,因此我将其添加为原点:
    1. git远程添加上游https://github.com/original/aproject.git
  4. git remote -v检查我是否同时看到了两个遥控器(我的叉子和叉子)
  5. git fetch --all
  6. git状态(表明我正在开发中)
  7. git checkout开发(已经开发)
  8. git合并上游/开发 致命的:拒绝合并无关的历史记录

这过去工作正常。如此危险,我在本地删除了整个仓库,从github上删除了我的fork,创建了一个新的fork,然后再次执行了所有步骤,并得到了相同的结果。

当我在github UI中查看我的fork的仓库时,它说“是从original / aproject分叉的。所以git / github知道相关的历史记录!

有什么建议吗?

git版本2.16.3

更新1

torek建议检查提交哈希值:

git ls-remote给出:

 1ee37f195c25d51a1159428a155062ca3acd48d7   HEAD
 1ee37f195c25d51a1159428a155062ca3acd48d7   refs/heads/develop
 5dcee17dd30b6f57d4711495934fa722a32e60a5   refs/heads/master

如果我现在转到我创建的原始存储库,并查看提交,我会看到:

1ee37f195c25d51a1159428a155062ca3acd48d7

这是在我分叉之前犯下的。自从我分叉以来,在我分叉的回购协议上还有进一步的承诺,但是我不能合并它们,因为它说“无关历史”,我相信这是错误的。这可能是git中的错误吗?

注2:我过去已经完全完成了这些步骤,并且仍然有效,但是那是在使用git bash / tortoise的PC上。现在我在Mac上。我不知道这有什么区别。

我没有对本地分叉存储库进行任何更改。没有提交,编辑或新文件(直到我可以解决此问题)

更新2

我找到了解决方法。看来,如果我这样做:

git clone https://github.com/me/aproject.git
git checkout develop

代替

git clone -b develop https://github.com/me/aproject.git

然后我可以稍后从上游远程服务器(和原始远程服务器)获取-all并合并到本地和原始服务器。

1 个答案:

答案 0 :(得分:0)

鉴于您概述的操作顺序,唯一看到此效果的方法是上游 rewrote 是否所有提交(例如,使用git filter-branch filters -- --all

做这种事情有效地替换了整个存储库(好吧,可以替换,取决于精确的过滤)。新的存储库不再与原始存储库的任何克隆兼容,因此尝试混合它们通常是不明智的。好像他们(无论他们是谁)都删除了他们的存储库,而其他人进入了另一个存储库(您没有分叉)并将其放置在同一位置。

您可以通过将fork中的实际Git commit哈希ID与您分叉的存储库中的ID进行比较来判断是否发生了这种情况。两者都可以匹配,在这种情况下,历史 是相关的,合并应该可以进行;否则它们将不匹配,在这种情况下,历史记录与无关相关,并且它们必须重写了每个提交。在这里重要的是哈希ID。