Git错误non-fast-forward的解决方法
秦时明月之君临天下 2019-05-02 10:58:39 34741 收藏 45
分类专栏: Git GitHub 文章标签: git
版权

目录

1、问题描述

2、分析问题

3、解决问题

3.1、先合并之前的历史,再进行提交——提倡使用

3.2、丢弃之前的历史,强推——谨慎使用
1、问题描述

当要push代码到git时,出现提示:

$ git push origin master
To …/remote/
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to ‘…/remote/’

2、分析问题

Dealing with “non-fast-forward” errors:(From time to time you may encounter this error while pushing)To prevent you from losing history, non-fast-forward updates were rejected. Merge the remote changes before pushing again. See the 'non-fast forward' section of 'git push --help' for details.This error can be a bit overwhelming at first, do not fear. Simply put, git cannot make the change on the remote without losing commits, so it refuses the push. Usually this is caused by another user pushing to the same branch. You can remedy this by fetching and merging the remote branch, or using pull to perform both at once.In other cases this error is a result of destructive changes made locally by using commands like git commit --amend or git rebase. While you can override the remote by adding --force to the push command, you should only do so if you are absolutely certain this is what you want to do. Force-pushes can cause issues for other users that have fetched the remote branch, and is considered bad practice. When in doubt, don’t force-push.

上面这段是从博主那摘抄的(2012年的文章),其实这和上面那张图的内容有很多相似之处,因为技术的发展和经验的积累,现在的git的功能也越来越完善,它不仅提示出错(具体原因),还会给出一些建设性意见,以供你参考。

我们知道git的一大好处就是可以团队合作开发,但是这就涉及到一个问题,怎么保证远程仓库的一致性?这也是它不得不处理的一个重要问题!

我们可以这样理解这个问题就是:别人上传到远程仓库后,你没有及时的同步(、拉取)到本地,但是你同时又添加了一些内容(提交),以致于你在提交时,它会检测到你之前从远程仓库拉取的时候的仓库状态和现在的不一样。于是,它为了安全起见拒绝了你的提交(然后就报了这个错误)。

再者我们可以简单来理解这个问题:我们从字面上理解“non-fast-forward”,可以认为是“不能快速前进”,我觉得有个广告说得好:车到山前必有路……但是路有好走的路,也有不好走的路;而遇到不好走的路时(比如前方遇到拦路石,或者是前方出现岔路),我们就不得不停下来思考“以后的路该怎么走”了,我们“不仅要低头赶路,也要抬头看路”就是这个意思。

“不能快速前进”的原因是因为路不一样了,变得不好走了;体现在git里面就是提交历史出现分叉,主线不再是一条直线,而是在前端出现了分叉,git不知道该如何前进,所以报错了,让你来觉得走哪条路!

3、解决问题

于是你有2个选择方式:
3.1、先合并之前的历史,再进行提交——提倡使用

(1)先把git的东西fetch到你本地然后merge后再push

$ git fetch origin master

$ git merge origin FETCH_HEAD

先抓取远程仓库的更新到本地,然后与你的本地仓库合并,(如果有冲突就要解决冲突后再合并,冲突问题比较复杂,这里就不详细说了),这样就可以使远程仓库和你本地仓库一致了,然后就可以提交修改了。

(2)这2句命令等价于
$ git pull origin master

但是使用git fetch + git merge 更加安全。

(3)git pull --rebase origin master

重定基,可以是历史更加统一,即使提交历史趋向于一条直线。

补充:他们之间的关系

git pull = git fetch + git merge FETCH_HEAD git pull --rebase =  git fetch + git rebase FETCH_HEAD

3.2、丢弃之前的历史,强推——谨慎使用

强推,即利用强覆盖方式用你本地的代码替代git仓库内的内容

$ git push -f 或者 $ git push --force

官方文档提示:This flag disables these checks, and can cause the remote repository to lose commits; use it with care.(即:此标志禁用这些检查,并可能导致远程存储库丢失提交;小心使用。)

俗话说得好:“强扭的瓜不甜”,强制(暴力)执行总会产生一些不好的结果,应慎重考虑是否使用该命令!!!

不仅在此处,在平时使用时,也要非常注意,除非你真的是想覆盖远程仓库(你真的知道自己在干嘛!),不然最好不要强制执行。

推荐阅读(英文):Dealing with non-fast-forward errors

2019年7月28日10:02:13 更新部分内容。
————————————————
版权声明:本文为CSDN博主「秦时明月之君临天下」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_41287260/article/details/89742151

Git错误non-fast-forward的解决方法相关推荐

  1. ssh 连接错误 Too many authentication failures 解决方法

    ssh 连接错误 Too many authentication failures 解决方法 背景 有时候使用 ssh 登录 或者 git ssh 方式连接 时会遇到:Too many authent ...

  2. You may want to first integrate the remote changes (e.g., ‘git pull ...‘) before pushing again多种解决方法

    文章目录 1. 复现错误 2. 分析错误 3. 解决错误 4. 解决该错误的其他方法 1. 复现错误 今天使用git status查看文件状态,发现有一个文件未提交,如下代码所示: D:\projec ...

  3. 有关git clone 下载速度变慢的解决方法

    有关git clone 下载速度变慢的解决方法 参考文章: (1)有关git clone 下载速度变慢的解决方法 (2)https://www.cnblogs.com/moegarn/p/110448 ...

  4. Win7 IIS7 HTTP 错误 404.2 - Not Found解决方法 ISAPI CGI

    Win7 IIS7 HTTP 错误 404.2 - Not Found解决方法 ISAPI CGI 参考文章: (1)Win7 IIS7 HTTP 错误 404.2 - Not Found解决方法 I ...

  5. git clone 代码下载速度慢的解决方法

    git clone 代码下载速度慢的解决方法 参考文章: (1)git clone 代码下载速度慢的解决方法 (2)https://www.cnblogs.com/tristers/p/1217220 ...

  6. IIS HTTP 错误 404.17 - Not Found 解决方法

    IIS HTTP 错误 404.17 - Not Found 解决方法 参考文章: (1)IIS HTTP 错误 404.17 - Not Found 解决方法 (2)https://www.cnbl ...

  7. git pull 卡在 Unpacking objects 解决方法

    git pull 卡在 Unpacking objects 解决方法 在拉取大型二进制对象(如Adobe Illustrator文件等)时,可能会使整个拉取/推送/克隆过程陷入困境. 如果你仓库没有过 ...

  8. mysql报错error2002_mysql中异常错误ERROR:2002的解决方法分享

    最近在启动mysql的时候发现mysql报错了,错误代码是2002,通过查找相关的资料发现是var/lib/mysql 的访问权限问题,所以这篇文章主要介绍了mysql中异常错误ERROR:2002的 ...

  9. 微信你scope 参数错误 php,微信开发: scope参数错误或没有scope权限解决方法

    scope为snsapi_userinfo 未关注者点击授权提示   scope参数错误或没有scope权限 解决方法 出现这种错误网上查出现有的原因是: 订阅号没有相关的权限 账号没有认证,没有相关 ...

  10. mysql 1053错误,无法启动的解决方法

    mysql 1053错误,无法启动的解决方法 参考文章: (1)mysql 1053错误,无法启动的解决方法 (2)https://www.cnblogs.com/jinjiangongzuoshi/ ...

最新文章

  1. 学习笔记Hive(二)—— Hive安装配置
  2. 步步为营 .NET三层架构解析 四、Model设计(四种设计方式)
  3. 文本生成器(bzoj 1030)
  4. javascript优先级注意点
  5. LINQ to XML 编程基础
  6. 【PHP学习】—利用ajax原理实现密码修改功能(九)
  7. ubuntu(jdk配置)
  8. 如何编写高质量的代码二 - 类的设计
  9. 当下学习Linux该选择哪个产品?
  10. C++ socket编程select模型
  11. 几何画板椭圆九种画法_椭圆的标准方程课堂(几何画板动画版).ppt
  12. 读Doom启示录 有感
  13. Java EE互联网轻量级框架整合开发
  14. Spring-AOP原理详解
  15. win10pe命令打开计算机,win10系统制作PE启动盘的操作方法
  16. 在QT下使用映美精黑白相机
  17. c语言房屋中介管理系统代码,房屋中介管理系统简易源代码
  18. 防火墙中的DMZ区域,Trust区域,Untrust区域
  19. PUT和POST的区别
  20. Elasticsearch生命周期策略ilm_policy、索引模板template管理(一)

热门文章

  1. php lucene索引,用PHP调用Lucene包来实现全文检索_PHP教程
  2. [vijos P1919] 最有活力的鲜花
  3. python输出到文件
  4. 模型学习 - HNN、RBM、DBN
  5. ajax 批量上传图片插件,jQuery多文件上传插件jquery.imageuploader.js
  6. assertequal用法python_assertEqual和assertIs之间有什么区别(assertIs是在Python 2.7中引入的)?...
  7. python修改电脑名称_python 脚本之批量更改主机名
  8. python什么模块动态调用链接库_python如何调用扩展模块
  9. java web 图书管理系统_图书管理系统,源代码 Java初级小项目
  10. 20220401 从解方程角度看什么是线性系统的能控与能观