hint: Updates were rejected because the tip of your current branch is behind(git push线上与本地版本冲突问题)

Git本地代码推送到线上出现的问题

错误信息为:

error: failed to push some refs to 'http://**:**/**/**.git'
hint: Updates were rejected because the tip of your current branch is behind
To http://**:**/**/**.git
!	refs/heads/master:refs/heads/master	[rejected] (non-fast-forward)
Done
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.

大致翻译为:

错误:无法将某些引用推送到“http://**:**/**/**.git'
提示:更新被拒绝,因为当前分支的提示已过期
到http://**:**/**/**.git
!refs/heads/master:refs/heads/master[拒绝](非快进)
多恩
提示:它的远程对应项。集成远程更改(例如。
提示:“git pull…”)。
提示:有关详细信息,请参阅“git push--help”中的“关于快进的注释”。

指的是,我们本地的仓库分支版本已经滞后,线上存在最新版本,所以不能进行推送操作

此时我们需要先将线上分支的内容update到本地,处理完冲突的内容后,再进行push操作

在项目路径,终端执行:git pull

这时候有可能出现以下异常

error: Your local changes to the following files would be overwritten by merge:
# 错误:您对以下文件的本地更改将被合并覆盖:

大致说明就是:本地代码会被线上分支所覆盖(如果本地编写的代码比较重要的话,肯定是不能被覆盖)

git pull实际上就是一个远程分支merge到本地分支的过程,git pull出现问题说明出现冲突(说明本地分支不是基于最新版本进行开发,那么就会merge失败)

解决方案

一、保留本地修改的文件

  1. 基于git stash将本地修改的放到堆栈区
  2. git pull 拉取最新代码到本地
  3. git stash pop把堆栈区的本地修改代码还原

上面步骤进行完毕之后,遇到本地代码与git pull代码有冲突需要手动解决,然后就可以进行git push

关于:git stash的用法

  • git stash:备份当前工作区内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前工作区内容保存到Git栈中
  • git pull:拉取服务器上当前分支代码
  • git stash pop:从Git栈中读取最近一次保存的内容,恢复工作区相关内容。同时,用户可能进行多次stash操作,需要保证后stash的最先被取到,所以用栈(先进后出)来管理;pop取栈顶的内容并恢复
  • git stash list:显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
  • git stash clear:清空Git栈

二、只想保留线上版本代码,选择完全覆盖本地代码

  1. git reset --hard:本地版本回退
  2. git pull:更新线上分支最新代码

你可能感兴趣的:(随笔,1024程序员节,git)