赞
踩
本地对10个文件做了修改, 并希望通过commit命令将本地的修改推送到远程分支上.
commit前拉取最新代码时的报错
先在本地执行git pull
来拉取&更新git远程分支上的最新代码时, 报了如下错误:
error: Your local changes to the following files would be overwritten by merge: project-1/src/main/scala/com/david/service/OrderMicrobatchStat.scala
详细报错log如下:
D:\IdeaProject-ws-2\project-1\module-1>git pull
remote: Enumerating objects: 27, done.
remote: Counting objects: 100% (27/27), done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 14 (delta 10), reused 0 (delta 0)
Unpacking objects: 100% (14/14), 1.06 KiB | 2.00 KiB/s, done.
From https://git.david.com/bigData/project-1
894f555..abd8edd test -> origin/test
error: Your local changes to the following files would be overwritten by merge:
project-1/src/main/scala/com/david/service/OrderMicrobatchStat.scala
Please commit your changes or stash them before you merge.
Aborting
Updating 894f555..abd8edd
解决方案:
方案1、服务器代码合并本地代码
$ git stash //暂存当前正在进行的工作。
$ git pull origin test //拉取服务器的代码
$ git stash pop //合并暂存的代码
方案2、服务器代码覆盖本地代码
$git reset --hard //回滚到上一个版本
$git pull origin test
本例中执行第一种方案.
D:\IdeaProject-ws-2\project-1\module-1>git stash
Saved working directory and index state WIP on test: 394f555 spark离线数据测试
通过执行git stash pop
, 来取出贮藏的代码时, 报了如下错误:
The stash entry is kept in case you need it again
D:\IdeaProject-ws-2\project-1\module-1>git stash pop
Auto-merging module-1/src/main/scala/com/david/service/OrderMicrobatchStat.scala
CONFLICT (content): Merge conflict in module-1/src/main/scala/com/david/service/OrderStat.scala
The stash entry is kept in case you need it again.
D:\IdeaProject-ws-2\project-1\module-1>git stash list
stash@{0}: WIP on test: 994f555 spark 代码中过滤脏数据)
这个问题产生的根源在于我们在本地git pull拉取代码后,stash雪藏起来的代码,与我们git pull下来的代码有冲突。
正因为有这个冲突,stash的代码才在git stash pop之后保留一份备用,以防后续还需要用到stash的代码。
此时通过git stash list命令,可以发现你stash的代码还是存在的。这时,如果正常的git stash pop,当代码又被放回工作区的话,这个暂存的代码会同时被清除掉;然而在异常的情况(如git pull下来的代码与git stash pop出来的代码有冲突的话),就会给出提示:尽管有冲突,git还是会把这份stash代码给我们做保留。
解决这种冲突,与解决正常commit后产生的冲突是一样的:保留自己已开发的功能,但同时不要删除团队其他成员开发的功能就好。
同解决commit类冲突一样的处理流程:打开冲突文件,解决冲突。
然后执行以下几步走方案:
①、git add xxx文件
②、git commit -m “冲突已解决log”
③、git push origin 相应的分支
当冲突解决完后,通常是不再需要这个stash了,直接执行 git stash clear 情况掉所有的暂存stash列表
Tips:
- git stash clear是把所有的stash都清空;
- 只删除某一个stash,如只删除队列中的第一个,可以执行:git stash drop stash@{0}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。