赞
踩
在进行代码开发时,忘了先git pull到本地之后,直接在台式机上的代码进行编写,突然想起忘了pull了,然后想用git pull来更新本地代码。结果报错:
error: Your local changes to the following files would be overwritten by merge: xxx/xxx/xxx.xx Please, commit your changes or stash them before you can merge. Aborting
出现这个问题的原因是其他人修改了项目中的代码文件xxx并提交到远程版本库中去了,而你本地也修改了改代码文件xxx,这时候你进行git pull操作就好出现冲突了,上面报错的意思是我台式机上新修改的代码的文件,将会被git服务器上的代码覆盖,我们当然不想刚刚写的代码被覆盖掉,那么我们应该如何解决呢。
在报错中我们看到官方推荐的解决方案是使用直接commit或者使用stash。那么我们来看看这两种操作方式的区别和使用:
保留本地的方式修改(强烈推荐,还有一种是直接拉取服务器的(不推荐使用就不写了),这样你本地修改的代码的,就会舍弃,相当于你写的代码直接没,你还的重新写)。
主要方式如下:
通过git stash
将工作区恢复到上次提交的内容,同时备份并暂时隐藏本地所做的修改,之后就可以正常git pull
了,git pull
完成后,执行git stash pop
将之前本地做的修改隐藏的应用拉取到当前工作区。
stash翻译为“隐藏”,如下操作:
git stash
git pull
git stash pop
git stash
: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。git stash pop
: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。git stash list
: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。git stash clear
: 清空Git栈。此时使用gitk等图形化工具会发现,原来stash的哪些节点都消失了。
放弃本地修改,只保留服务器端代码,则直接回退到上一个版本,再进行pull:
git reset --hard
git pull origin master
注:其中origin master表示git的主分支。
忽略本地修改,强制拉取远程到本地,硬覆盖是一种比较通用的方式吗,但是不建议使用,如果使用需要先将修改在本地做好备份,否则本得改变将丢失。
主要是项目中的文档目录,看的时候可能多了些标注,现在远程文档更新,本地的版本已无用,可以强拉
git fetch --all
git reset --hard origin/dev
git pull
关于commit和pull的先后顺序,commit >> pull >> push 和 pull >> commit >> push的顺序,两种情况都遇到过代码冲突。解决方法如下:
未commit先pull,视本地修改量选择revert或stash
场景:
同事 有新提交
我 没有pull -> 修改了文件 -> pull -> 提示有冲突
如果本地修改量小,例如只修改了一行,可以按照以下流程:
git revert(把自己的代码取消) >> git pull >> 在最新代码上修改 >> [pull确认最新] >> commit&push
本地修改量大,冲突较多,有两种方式处理:
stash save(把自己的代码隐藏存起来) >> 重新pull -> stash pop(把存起来的隐藏的代码取回来 ) >> 代码文件会显示冲突 >> 右键选择edit conficts,解决后点击编辑页面的 mark as resolved >> commit&push
>> stash save(把自己的代码隐藏存起来) >> 重新pull >> stash pop(把存起来的隐藏的代码取回来 ) >> 代码文件会显示冲突 >> 右键选择resolve conflict >> 打开文件解决冲突 ->commit&push
已commit未push,视本地修改量选择reset或直接merge。
场景:
同事 有新提交
我 没有pull >> 修改了文件 >> commit >> pull >> 提示有冲突
修改量小,直接回退到未提交的版本(可选择是否保存本地修改)
如果本地修改量小,例如只修改了一行,可以按照以下流程
reset(回退到未修改之前,选hard模式,把自己的更改取消) >> 重新pull >> 在最新代码上修改 >> [pull确认最新] >> commit&push
ps:实际上完全可以采取直接merge的方法,这里主要是根据尽量避免merge的原则,提供一种思路
修改量大,直接merge,再提交(目前常用)
commit后pull显示冲突 >> 手动merge解决冲突 >> 重新commit >> push
以上就是笔者遇到或者整理的一些冲突的解决场景或者方案,希望可以帮到大家。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。