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失败)
解决方案
一、保留本地修改的文件
- 基于
git stash 将本地修改的放到堆栈区 git pull 拉取最新代码到本地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栈
二、只想保留线上版本代码,选择完全覆盖本地代码
git reset --hard :本地版本回退git pull :更新线上分支最新代码
|