To gitee.com:xuankb/name.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'gitee.com:xuankb/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.
这个错误信息表明, 你在尝试推送到远程仓库时遇到了问题.
错误的主要原因是, 你本地的master分支落后于远程仓库的master分支.
这通常发生在远程仓库有新的提交,而你的本地仓库还没有这些更新.
简单来说, 就是 远程仓库有的东西, 你本地仓库没有.
这时候, 你把本地仓库的代码, 推送到远程仓库, 就会爆出这个错误.
这个问题的解决思路就是, 把远程仓库的代码, 先拉取到本地仓库, 然后再进行提交.
以下是我解决该问题的步骤:
1.git fetch origin
该命令的作用是, 从远程仓库获取最新的代码内容.
但是, 它只是获取信息, 并不会自动合并或修改你当前本地仓库的代码.
这是它独特的优势.
注意: 该命令还有其他的作用, 想知道的可以自行搜索查看.
2.git merge origin/master
该命令作用是, 把远程仓库主分支(origin/master)的更改合并到你的本地仓库分支中.
这个操作会使你 本地仓库的分支 与 远程仓库的主分 支保持同步.
注意: 如果你当下的文件夹与之前的文件夹不是同一个, 并且两个文件夹都经历了git初始化, 那就会产生另一个冲突.
简单来说.
你上次提交用的是 甲文件夹, 经历了git初始化(git init 命令).
这次提交用的是 乙文件夹, 经历了git初始化(git init 命令).
这种情况, 就会产生另外一个冲突.
这个冲突产生原因就是:
远程仓库和本地仓库有完全不同的提交历史.
这里的远程仓库, 指的是, 与 甲文件夹 有连接的远程仓库.
这里的本地仓库, 指的是, 你当下的 乙文件夹.
(因为是两个不同的文件夹, 而且都经历了git init 初始化, 所以会出现 拒绝合并, 毕竟都不是一个祖宗).
如何解决这个问题呢?
这里有两个办法:
第一个是, git clone URL
如果你认为你的本地仓库代码不重要, 你可以直接克隆远程仓库.
第二个是, git pull origin master --allow-unrelated-histories
git pull origin master
它的作用是, 从 远程仓库的分支中 获取最新的代码, 把最新代码自动合并到当下的本地仓库的分支中.
--allow-unrelated-histories
它的作用是, 允许git强行合并两个没有共同提交历史的分支.
只要上帝允许, 就算不是一个祖先, 现在也可以是一家人.
现在执行 git pull origin master --allow-unrelated-histories
之后, 会出现下面这个界面.
别紧张, 这不是新错误.
而是git想让你解释为什么非要强行合并, 现在你是霸王硬上弓, 别人想找你要个理由, 也很正常.
如果你想要说些什么, 可以在空白区域直接留言.
如果不想, 你也可以直接 保存并关闭编辑器, 彪悍的人生不需要解释.
你可能还想知道 保存并关闭编辑器的方法.
它只有三招, 非常简单.
第一, 按下ESC键, 确保你处于命令模式.
第二, 输入 :wq
w 表示 写入(保存)文件
q 表示退出编辑器
第三, 按下Enter键执行命令
三招一出, 搞定一切.
3.接下来你再执行 git merge origin/master
现在你再执行 git merge origin/master
会给你这么显示.
它的意思就是说, 你当前分支已经是最新的, 不需要进行任何合并操作.
4.把 本地仓库的代码 推送到 远程仓库
现在你再执行 git push -u origin master
如果你本地仓库的分支已经和远程仓库的分支建立了联系.
可以直接执行 git push origin master
如图可见.
把 本地仓库的代码 推送到 远程仓库 成功 ! ! !
问题解决 ! ! !