赞
踩
在使用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"
2.通过 git remote add origin
指定远程仓库地址:
git remote add origin https://github.com/<user>/<repo_name>.git
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.
4.由于无法提交,按照上面提示 git pull ...
进行操作:
λ git pull origin master
From https://github.com/<user>/<repo_name>
* branch master -> FETCH_HEAD
fatal: refusing to merge unrelated histories
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
当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
fatal: refusing to merge unrelated histories
这个错误提醒我们在合并分支时应当谨慎行事,确保理解并尊重项目的历史演化路径。通过采取适当的解决策略,我们可以既保持 Git
仓库的清晰结构,又能满足项目整合的需求。在实践中,深入了解并灵活运用 Git
的各种命令和特性,将有助于我们更高效地管理和维护项目版本。
喜欢的话帮忙点个赞 + 关注吧,将持续更新 Git
相关的文章,还可以关注我的公众号 梁三石FE
,感谢您的关注~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。