"锋哥, Git 有什么可说的, 不就是 git add 添加, git commit 提交嘛" 听说我要写一篇 Git 教程, 小明不屑一顾地说.
"...".
小明是我的一个学生. 目前, 是一名 Android 开发工程师.
过了几天, 我又再次见到了小明.
"锋哥, 今天, 我在 Github 新建了一个版本库, 本地提交后推送远程的时候, 却被拒绝了, 是怎么回事?"
以下是小明的操作记录:
git init
git add .
git commit -m "Init commit"
git remote add origin git@github.com:xiaoming/xxx.git
git pull origin master
以上操作触发了下面的错误:
From git@github.com:xiaoming/xxx.git
* branch master -> FETCH_HEAD
* [new branch] master -> origin/master
fatal: refusing to merge unrelated histories
"小明, 注意看最后一句提示. 翻译成中文的意思是'拒绝合并不相关的历史', 这个问题有两个方案可以处理."
git pull 命令其实是触发了拉取 git fetch 和合并 git merge 两个操作. 而本地的版本库和远程版本库在第一次拉取或推送完成之前是毫不相关的, Git 为了避免不必要的合并, 默认不允许进行这样的操作. 但你可以手动添加
--allow-unrelated-histories
强制进行合并, 这是方案一.
git pull origin master --allow-unrelated-histories
再来看方案二, 从你上面的操作来看, 你只是在本地初始化了一个版本库, 并完成了基础的提交. 接下来, 你希望和远程版本库建立关联, 将提交推送到远程. 这种情况下, 其实你可能并不需要远程的默认数据 (通常是一个空的 README 文件). 所以, 你可以添加 - f 参数, 将提交强制提交并覆盖远程版本库.
git push -f origin master
小明若有所思地点点头, 这是小明第一次遇到 Git 问题. 我想, 接下来他应该会比较顺利了.
没想到, 过了几天, 我又收到了小明的消息. 这一次, 他发来的是对 Git 的抱怨.
" 锋哥, Git 好讨厌, 提交日志出现了错误, 也不能修改. 你知道搜狗输入法有时候不够智能, 输入太快不小心就输错了...
来源: http://www.jianshu.com/p/3d17a8efce33