git 子树错误 "fatal: refusing to merge unrelated histories"

git subtree error "fatal: refusing to merge unrelated histories"

我想弄清楚 'git subtree' 是如何工作的。我已按照 this page 上的所有说明进行操作,但在我自己的存储库 ('Step 2') 中尝试合并子树项目时总是出错:fatal: refusing to merge unrelated histories

我读过 this post,当我使用 --allow-unrelated-histories 选项时,它似乎工作正常。然而,我不确定我是否应该使用这个……我的印象是子树的全部意义在于在一个存储库中有不相关的历史,所以不得不添加这个选项感觉很奇怪。尽管如此,我还是应该添加它,还是我做错了什么?

我在 osx 10.11.6

上使用 git v2.9.3

这是 git 中的错误,已在 https://github.com/git/git/commit/0f12c7d4d175bb0566208213b1b340b6794f305c

中修复

另请参阅:https://www.spinics.net/lists/git/msg282340.html

我为此苦苦挣扎了一段时间,认为我找到了解决方案。

我是 git 的新手,所以如果我使用了错误的名称,请原谅我。

问题可能出在您使用 --squash 选项时 运行 git 子树添加命令。

尝试删除子树(删除远程存储库并删除所有本地文件、提交和推送)。然后在没有 --squash 选项的情况下重做子树添加。

然后我跳转到我的子树存储库,进行了一些更改、提交和推送,然后跳回到我的主超级项目存储库并进行了 git 子树拉取。它给了我一些关于有修改的工作树的错误。为了解决这个问题,我做了一个 git checkout master,然后是一个 git push,然后再次尝试了 subtree pull。成功了。

希望对您有所帮助。

如果子树是使用--squash添加的,拉取时也需要使用--squash

git subtree pull --prefix=<folder-goes-here> <remote-goes-here> <branch-goes-here> --squash

我不是专家

但我发现了一些东西。我最初只是尝试正常拉动。 但是我找到了这个特定的子树拉。

git subtree pull --prefix myPrefixname https://github.com/subTreeRepo.git master --squash

master当然是分支名称

(来自

https://developer.atlassian.com/blog/2015/05/the-power-of-git-subtree/

)

对我有用的是使用 git merge 和子树策略:

git merge -s subtree -Xsubtree="$prefix" subremote/branch --allow-unrelated-histories

git subtree 使用了类似于引擎盖下的东西。