1.1.1. P1
问题场景
执行此命令 $ git push origin develop:develop
To https://gitee.com/xxx.git
! [rejected] develop -> develop (non-fast-forward)
error: failed to push some refs to 'https://gitee.com/xxx.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
对应中文释义:
错误:无法将某些引用推送到“ https://gitee.com/xxx.git”
提示:由于您当前分支的提示位于后面,因此更新被拒绝
提示:它的远程副本。 集成远程更改(例如
提示:“ git pull ...”),然后再次按下。
提示:有关详细信息,请参见“ git push --help”中的“关于快进的注意事项”。
分析:
问题场景:
提交本地分支到远程,但远程已有代码,大概率是在本地仓库第一次连接远程仓库。
本质:两个仓库不一致,无相同的祖先,无一个共同的commit等。git 程序无法确认两个仓库相关。
解决方案:
法一【建议使用】:先获取远程分支代码,再提交
git pull origin develop --allow-unrelated-histories
git pull origin develop --allow-unrelated-histories
From https://gitee.com/xxx
* branch develop -> FETCH_HEAD
Merge made by the 'recursive' strategy.
README.en.md | 36 ++++++++++++++++++++++++++++++++++++
README.md | 37 +++++++++++++++++++++++++++++++++++++
2 files changed, 73 insertions(+)
create mode 100644 README.en.md
create mode 100644 README.md
法二【不建议使用】:强制提交,会覆盖远程仓库代码,仅可在远程代码无重要内容/空/初次建立连接的时候使用。
git push -f origin develop
土法:
把远程代码 clone下来, 此时仓库和远程一致。再把自己的文件加进去,提交。
注:若法一使用 git pull origin develop 可能会报
$ git pull origin develop
From https://gitee.com/xxx
- branch develop -> FETCH_HEAD
fatal: refusing to merge unrelated histories
对应中文释义:
-分支开发-> FETCH_HEAD
致命的:拒绝合并无关的历史
1.1.2. 知识点: --allow-unrelated-histories
对应中文释义:允许无关的历史记录
1.2. P2 does not appear to be a git repository
场景:pull/push 代码,remote origin 是 git@xxxxx。
fatal: 'git@github.com/xxx/xxx' does not appear to be a git repository
fatal: Could not read from remote repositor.
一般人:公钥没配。配成功后 ssh -T git@github.com
返回 Hi number-10! You've successfully authenticated, but GitHub does not provide shell access.
我:远程仓库地址错误 。 git@github.com/xxx/xxx 不是/是: git@github.com是后面跟着 :。
问题经历:
差一点就重新设置公钥了,由于测试是成功的,
所以坚持没配,肯定有其它问题。网上都是说没配,哪想到我的错误如此简单。
总结: 不要自己改,要从github上复制。能复制就不要手打。