当前位置:   article > 正文

深入理解与解决Git中的“fatal: refusing to merge unrelated hi_refusing to merge unrelated histories

refusing to merge unrelated histories

引言

在使用Git进行版本控制的过程中,你可能偶尔会遇到这样的错误信息:fatal: refusing to merge unrelated histories。这个看似棘手的问题实际上反映了 Git 的一种安全策略,旨在防止在没有共同历史的情况下合并两个独立的项目。本文将详细介绍这个问题产生的背景、原因,并提供几种有效的解决策略。

错误场景

1.在本地新建仓库和添加文件:

mkdir test-demo
cd test-demo
git init 
touch README.md
git add README.md
git commit -m "first commit"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.通过 git remote add origin 指定远程仓库地址:

git remote add origin https://github.com/<user>/<repo_name>.git
  • 1

3.提交代码后出现如下错误

λ git push origin master
To https://github.com/<user>/<repo_name>.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'https://github.com/<user>/<repo_name>.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. If you want to integrate the remote changes,
hint: use 'git pull' before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

4.由于无法提交,按照上面提示 git pull ... 进行操作:

λ git pull origin master
From https://github.com/<user>/<repo_name>
 * branch            master     -> FETCH_HEAD
fatal: refusing to merge unrelated histories
  • 1
  • 2
  • 3
  • 4

5.解决方法:使用 --allow-unrelated-histories 选项执行 git pull 命令。

# 更新
λ git pull origin master --allow-unrelated-histories
From https://github.com/<user>/<repo_name>
 * branch            master     -> FETCH_HEAD
Merge made by the 'ort' strategy.
 README.md | 38 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)
 create mode 100644 README.md
 
 # 提交
 λ git push origin master
Enumerating objects: 16, done.
Counting objects: 100% (16/16), done.
Delta compression using up to 8 threads
Compressing objects: 100% (13/13), done.
Writing objects: 100% (15/15), 8.43 KiB | 2.81 MiB/s, done.
Total 15 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/<user>/<repo_name>.git
   0f4b2a4..d66bff9  master -> master
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

问题解释

当Git检测到你尝试合并的两个分支没有共享的提交历史时,就会报出 fatal: refusing to merge unrelated histories 的错误。这意味着 Git 无法找到一个共同的祖先节点来执行常规的合并操作。这种情形常见于以下几种场景:

1. 克隆一个全新的仓库并试图与现有仓库合并:如果你从 GitHub 或其他地方克隆了一个全新的项目,并打算将其合并到正在工作的本地仓库中,Git 会识别到两者历史上的断层,从而拒绝合并。

2. 合并两个长期独立发展的项目:如果你有两个长期独立发展且未曾合并过的历史,试图将它们合并也会遇到此问题。

解决方法

这样的错误在执行 git pull, git push, git merge 命令可能会遇到,这是因为两个分支没有取得关系,具体的操作是在你操作命令后面加 --allow-unrelated-histories 参数就可以了。

# git merge

git merge master --allow-unrelated-histories

# git pull
git pull origin master --allow-unrelated-histories

# git push
git push origin master --allow-unrelated-histories
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

写在最后

fatal: refusing to merge unrelated histories 这个错误提醒我们在合并分支时应当谨慎行事,确保理解并尊重项目的历史演化路径。通过采取适当的解决策略,我们可以既保持 Git 仓库的清晰结构,又能满足项目整合的需求。在实践中,深入了解并灵活运用 Git 的各种命令和特性,将有助于我们更高效地管理和维护项目版本。

喜欢的话帮忙点个赞 + 关注吧,将持续更新 Git 相关的文章,还可以关注我的公众号 梁三石FE ,感谢您的关注~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/879152
推荐阅读
相关标签
  

闽ICP备14008679号