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
原因是其他人修改了某文件并提交到版本库中去了,而你本地也修改了某文件。
先pull下来,对A进行修改,提交准备再次pull的时候出现merge
原因是两次pull之间,有其他人对A部分已经修改并且提交合并了,而本地A部分代码还在1.0阶段,开发分支已经在1.1阶段,你对A部分的修改应该在最新的1.1阶段(防止代码有变化而你不知道)的基础上进行
解决冲突就是 提醒你A部分已经被人修改成1.1阶段的,不是你修改之前1.0阶段的代码了,你再看看这部分到底要怎么修改,是保留你的?还是她的 ?还是一起保留下来?
如果两次pull之间,没有人修改A部分,修改的是B部分,则开发分支升级到1.1阶段,第二次pull下来以后,本地分支升级到1.1阶段,此时可以push上去(即要修改的部分在修改前后,远程仓库代码没有发生变化)
①没有commit 操作,自己修改了文件,然后 git pull,这个时候是不可以pull的,因为git会提醒本地有修改没有commit。
先进行 git status 查找修改文件,如 xxx.java文件进行 git add xxx.java。
然后 git add && git commit && git pull 这三连。
那为什么要先commit,然后pull,然后再push?
pull了,岂不是把自己改的代码都给覆盖掉了嘛,因为远程没有我改的代码,我pull,岂不是覆盖了我本地的改动好的地方了?
原因:
先 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(没有commit 操作,git 不知道你改了)
这个时候 B 本地版本已经到3了,B 在本地版本3的时候改了 A 写过的代码,再进行了git commit && git push 那么在远程版本中就是4,而且 A 的代码被覆盖了,
//此处是指AB协同工作时,B在修改的时候不知道A是否已经修改过了的意思?
所以说所有人都要先 commit 再 pull,不然真的会覆盖代码的。
//相当于直接pull代码然后把A的代码进行修改再push上去??
强调如下:如果没有commit执行git pull,上面B修改的时候不是同一块代码,才可以成功更新(pull)下来到本地仓库,但是此时IDEA里面看不到最新内容,然后不知情的改了A写过的代码,再commit和push,可以成功覆盖git上面的A的修改。//pull以后可以看到最新的内容呀
此段主要强调的是:为了避免 不知情的修改了别人代码 还不报错的成功push上去,所以需要先commit再pull,目的就是为了能在IDEA上看的见A修改的代码。。。。
2. 问题: 两个分支A和B,A合并B和B合并A,有区别吗?
将master合并到dev中,则master中新增加或者修改了dev中变化的,dev无变化
可以从master中重新拉取分支作为新的开发分支,保证其中都是最新的代码
————————————————
版权声明:本文为优快云博主「叶孤崖」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/qq_34246965/article/details/107553644
3. 个人开发分支和基线的关系
从远程仓库中的基线拉取出个人分支,clone个人分支和基线到本地,在本地的个人分支上进行开发,测试本地代码没有问题。
在本地基线中pull最新的代码,将个人分支合并到基线上,然后将基线push,删掉远程仓库中的个人分支以及本地个人分支代码,重新远程拉取个人分支,clone代码到本地。
只要保证开发前的代码和基线代码保持一致即可(最新)