Answers:
GitHub有一个不错的部分,名为“ 处理“非快速转发”错误 ”
首先,这个错误可能会让人有些不知所措,不要担心。
简而言之,git无法在不丢失提交的情况下在远程进行更改,因此它拒绝push。
通常,这是由另一个用户推送到同一分支引起的。您可以通过获取和合并远程分支,或使用pull一次执行两者来解决此问题。在其他情况下,此错误是由于使用诸如
git commit --amend
或命令在本地进行的破坏性更改的结果git rebase
。
虽然你可以通过添加覆盖远程--force
的push
命令,你应该只能这样做,如果你是绝对肯定这是你想要做什么。
强制推送可能会给获取了远程分支的其他用户带来问题,被认为是不正确的做法。如有疑问,请不要强行推动。
Git不能像快速合并那样在远程上进行更改,Visual Git参考说明了这一点,例如:
这不完全是您的情况,但是有助于了解什么是“快进”(HEAD
将分支的位置简单地移至新的最近提交)。
“ branch master->master (non-fast-forward) Already-up-to-date
”通常用于不跟踪其远程对应部分的本地分支机构。
例如,见此SO问题“ git pull说最新,但git push拒绝非快进 ”。
或两个分支是相互连接的,但是它们各自的历史不同:
请参阅“ 永无止境的GIT故事-我在这里做错了什么? ”
这意味着您的subversion分支和远程git master分支在某些方面不一致。
某些更改被推/承诺给另一个不在的更改。
开火gitk --all
,它应该为您提供出了什么地方的线索-寻找历史上的“叉子”。
这意味着存在其他推送到远程存储库的提交,这些提交与您的提交不同。您通常可以使用
git pull
在你推之前
最终,“快进”意味着可以将提交直接应用于工作树的顶部,而无需合并。
在这种情况下,您可能需要对推操作使用强制
git push origin master --force
绝对不要做某事git -f
,push
因为它可能导致以后的灾难性后果。
您只需要git pull
在本地分支机构中做一个即可。
例如:
git pull origin 'your_local_branch'
然后做一个 git push