一、问题:
本地要commit代码,commit之前需pull代码,但pull提示冲突。如下
Git Pull Failed Your local changes would be overwritten by merge. Commit, stash or revert them to proceed.
二、分析:
原因很简单,代码冲突。解决也很简单,如图提示那样。Commit, stash or revert 。
revert 就算了,Commit需要先Pull,肯定失败,只剩下stash。但是怎么stash呢?
三、Git 操作步骤:
- 本地代码先 git stash ;(stash作用见参考)
- 然后pull代码;
- 最终再将本地代码 git stash pop;
四、IDEA中实际操作:
1、stash:
2、unstash:
5、总结
- 我在本地修改后,直接从dev上pull代码,起了冲突;
- 一开始没想太多,百度到这个办法后直接就拿来用了,先pull成功了,然后恢复了我的修改的内容,直接push
- 在git上发现没有我的提交
- 后来才发现,我在pull成功后,没有commit我的修改,就直接push,所以暂存区里没有东西能够提交到远程,所以出错
6、经验
后来询问师哥明白了
- 本地(处于修改状态时,这个文件是打开状态的),pull代码的时候,git不会处理这个文件,反而将其他文件的代码拉取好,这样做的是为了防止你本地的修改丢失。
- 但由于处于修改状态的文件没有拉取得和远程一样,所以整个pull的过程就会Failed
- 所以,如果改动好了这个文件,想要提交到远程分支上
3. 1.你需要先提交本地代码到暂存区
3. 2. 再pull远程的代码,在pull的过程,其实就是合并你暂存区里新添加(删减)的内容
3. 3 再去push的时候,其实push的就是 你pull过程合并好的代码到远程上
7、回顾
- 第一次stash是解决bug分支问题,比如你正在改代码,突然让你去修复一个bug,你总不能撤销自己所有的操作呀,
- 所以就用stash,保留现在的工作状态
- stash后,本地你的所有刚刚写到一半的代码就都没有了,但其实它被保存起来,还可以恢复
- 当你bug修复结束,提交到远程后,
- 在通过unstash,你就又回到你修复bug之前的工作状态了
但这次,人们通过stash来解决冲突,有发现了stash的另一个用法,很不错!