当前位置:   article > 正文

解决git pull出现冲突 多重超详细分析_git pull冲突

git pull冲突

1.用git pull来更新代码的时候,遇到了下面的问题:error: Your local changes to the following files would be overwritten by merge: Please, commit your changes or stash them before you can merge

出现这个问题的原因是其他人修改了某文件并提交到版本库中去了,而你本地也修改了某文件,这时候你进行git pull操作就好出现冲突了,解决方法,在上面的提示中也说的很明确了。

保留本地的方式修改(强烈推荐,还有一种是直接拉取服务器的(不推荐使用就不写了),这样你本地修改的代码的,就会舍弃,相当于你写的代码直接没,你还的重新写)

解决方式:
选择①
没有commit 操作,自己修改了文件,然后 git pull”,这个时候是不可以pull的,因为git会提醒本地有修改没有commit。所以先 要先进行 git status 查找修改文件 xxx.java文件进行 git add xxx.java,千万别git add xxx.class文件。然后 git add && git commit && git pull 这三连。

有人会问:
那为什么要先commit,然后pull,然后再push,我pull了,岂不是把自己改的代码都给覆盖掉了嘛,因为远程没有我改的代码,我pull,岂不是覆盖了我本地的改动好的地方了?那我还怎么push?

原因:
这个先 commit 再 pull 最后再push 的情况就是为了应对多人合并开发的情况, commit 是为了告诉 git 我这次提交改了哪些东西,不然你只是改了但是 git 不知道你改了,也就无从判断比较;
pull是为了本地 commit 和远程commit 的对比记录,git 是按照文件的行数操作进行对比的,如果同时操作了某文件的同一行那么就会产生冲突,git 也会把这个冲突给标记出来,这个时候就需要先把和你冲突的那个人拉过来问问保留谁的代码, 然后在 git add && git commit && git pull 这三连,再次 pull 一次是为了防止再你们协商的时候另一个人给又提交了一版东西,如果真发生了那流程重复一遍,通常没有冲突的时候就直接给你合并了,不会把你的代码给覆盖掉
出现代码覆盖或者丢失的情况:比如A B两人的代码pull 时候的版本都是1,A在本地提交了2,3并且推送到远程了,B 进行修改的时候没有commit 操作,他先自己写了东西,然后 git pull 这个时候 B 本地版本已经到3了,B 在本地版本3的时候改了 A 写过的代码,再进行了git commit && git push 那么在远程版本中就是4,而且 A 的代码被覆盖了,所以说所有人都要先 commit 再 pull,不然真的会覆盖代码的。
强调如下:如果没有commit执行git pull,上面B修改的时候不是同一块代码,才可以成功更新(pull)下来到本地仓库,但是此时IDEA里面看不到最新内容,然后不知情的改了A写过的代码,再commit和push,可以成功覆盖git上面的A的修改。 此段主要强调的是:为了避免 不知情的修改了别人代码 还不报错的成功push上去,所以需要先commit再pull,目的就是为了能在IDEA上看的见A修改的代码。。。。文采不佳,这段话的确有点绕哈哈哈,实践胜于雄辩,建议自己试试几分钟就弄透彻了。

问题: 两个分支A和B,A合并B和B合并A,有区别吗?

原因两个互相合并的唯一区别就是 A->B 的时候 B 分支上会产生一个 merge_commit ,被改变的分支是 B ;如果现在没有发生任何改动执行 B->A ,则A和B两分支才会完全相同。

选择②
忽略本地修改,强制拉取远程到本地,主要是项目中的文档目录,看的时候可能多了些标注,现在远程文档更新,本地的版本已无用,可以强拉
1 git fetch --all      //1、Git fetch:Git fetch会将数据拉取到本地仓库 - 它并不会自动合并或修改当前的工作

2 git reset --hard origin/master   
// master为远程分支名称,若远程分支为haha,则 origin/haha 即可 抛开我所有的暂存和未分离的更改,忘记当前本地分支上的所有内容,并使其完全相同作为 origin/master或 origin/haha 。在运行命令之前,您可能想问这个问题。通过使用与硬重置相同的词语暗示破坏性。

3 git pull     //git pull是从远程获取最新版本并merge到本地,会自动合并或修改当前的工作。

选择③
保留本地的方式修改
通过git stash将工作区恢复到上次提交的内容,同时备份本地所做的修改,之后就可以正常git pull了,git pull完成后,执行git stash pop将之前本地做的修改应用到当前工作区。
1.git stash
2.git pull
3.git stash pop

git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。

git pull:拉取服务器上的代码;

git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。

git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。

git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/473547
推荐阅读
相关标签
  

闽ICP备14008679号