git中Updates were rejected because the tip of your current branch is behind解决方案

1.错误说明

出现这个错误的原因是git本地仓库的当前版本低于远程仓库的版本(大白话就是:你在github上进行的修改没有同步到本地git仓库中)。

2.错误原因

  • 第一种错误的原因

某一天你在本地仓库进行了相关修改然后上传到远程仓库中,这时本地仓库和远程仓库都是同步的,不会出现这种错误。过了几天你突然在github看到了一个错误需要修改,但你并没有通过本地仓库进行修改而是直接在github上进行修改,然后保存修改。这里就要注意一个问题,之前你通过本地仓库进行修改文章最后都会上传到远程仓库(也就是github中),这就保证了远程仓库和本地仓库是同步的,但是如果你直接在远程仓库(github)中进行修改,默认是不会上传到本地的,这就导致了一个问题,本地仓库中的相关内容没有被修改,而远程仓库中的相关内容被修改,这里可以理解为远程仓库更新了而本地仓库没有更新,这就导致了本地仓库的版本落后于远程仓库,也就是本地仓库和远程仓库版本不一致。而你现在直接在本地仓库这个落后的仓库中修改相关文件然后上传到远程仓库中就会出现错误,本地的修改是基于之前版本的修改,这种修改无法基于远程仓库中这种之后的版本,因为要修改的地方原本的内容都不同就会导致有些修改方法无法实现(比如说本地仓库要把1变为2就加一就可以了,但是远程仓库不是1而是3,这是如果用本地仓库的修改方法也加一就会变为4,这显然是不合适的)。

  • 第二种原因

在企业开发中,通常一个项目不是由一个人独立完成的而是由多个人共同完成的,由于另外的程序员更改了相关的代码并向远程上传了更改,而你没有同步他的更改而是在之前的基础上也更改了并上传就会出现版本低于远程版本的错误无法修改。举个简单的例子,要实现一个算式3先加一在减二最终得到2的功能,实现这个功能需要两步:先加一j,然后减二。假设你负责实现加一的功能,另外一个程序员实现减二的功能,现在本地仓库和远程仓库的数字都是3,正常情况下是你先实现加一的功能使本地的数字变为4然后上传到远程使远程的数字变为4,然后另一位程序员将远程更改后的数字4同步到本地使本地的数字也变为4,然后在本地4的基础上实现减二的功能使其变为2然后上传到远程使其也变为2,最后你同步远程的2到本地使你的本地数字也变为2,这样就实现了该功能。但是由于你的个人原因,让另一位程序员提前你一步实现减二的功能并上传到远程,导致远程的数字变为了0,而你现在上传加一的功能肯定是会报错的,如果成功那么远程就变为了1这显然是达不到功能需求的。

3.解决方案

  • 错误的解决方案(注意是错误的解决方案)
在终端下输入:git push -u origin master -f
   这句话执行的后果就是在远程仓库中进行的相关修改会被删除,使远程仓库回到你本地仓库未修改之前的那个版本,
   然后上传你基于本地仓库的修改。这如果在企业开发中就会让别的程序员的这些天的开发付之东流,一切回到解放前。
  • 正确的解决方案

先在终端下输入:git pull origin master

这句话是说将远程中进行的相关修改保存下来
  但这时可能会报错:error: Your local changes to the following files would be overwritten by merge:
  解决方案看我另一篇博客:https://blog.csdn.net/IT_SoftEngineer/article/details/107133284
  解决上述问题后就可保证远程仓库的更新会被同步到本地而本地仓库的修改也不会被覆盖
  然后就是add,commit,push命令将本地的修改上传到远程仓库中

猜你喜欢

转载自blog.csdn.net/IT_SoftEngineer/article/details/107133313