刚开始学习git,有个疑问.
小A和小B都从远程git clone了最新的版本。
两个人都在本地对代码进行了修改。
小A先提交了代码。
这时小B再提交代码,会发生什么事情呢?
是会覆盖小A提交的代码还是不让提交呢?
伊谢尔伦2017-05-02 09:35:30
先回答问题:
小A先提交了代码,远程库和小A得本地库同步,假设为 0 -> a
此时小B的本地库为 0 -> b,远程库的版本比本地库较新,git会拒绝推送并报错。
git 会要求 git pull 更新本地库,而 pull 操作相当于自动的 fetch 和 merge 操作,会试图自动将远程库合并入本地库,在有冲突时再要求手动合并。
漂亮男人2017-05-02 09:35:30
会提示小B先pull 代码,如果小B修改的代码那一行跟小A的一样,那个文件那一行会提示冲突,这里需要手动合并,如果修改的不一样,Git会自动合并相关代码
淡淡烟草味2017-05-02 09:35:30
有个习惯,我觉得听不错的,就是每次提交代码的时候,你要先pull 再push 这样很大程度上会避免报错,至于解决冲突,这是代码的问题,报错后文件会显示红色,有个分割线,上面的是人家的代码,下面的是你自己的代码,根据需要取舍。
習慣沉默2017-05-02 09:35:30
小B在提交代码时应先git pull更新代码,如果代码有冲突就会出现类似这样的错误:
error: Your local changes to the following files would be overwritten by merge:
****/****/**.php
Please, commit your changes or stash them before you can merge.
这时候git要求你先手动修改冲突,找到提示的文件,冲突的部分就会出现《《《《《来分隔代码改变的部分,需要修改那部分,就看你怎么选了。
大家讲道理2017-05-02 09:35:30
git不会自己解决冲突,只会试着去合并patch,如果git发现两个patch修改了相同内容就会主动使用<<<<<< >>>>>>>>来显示冲突,然后在认为解决。