本地分支不能直接merge rel分支这样会让本地分支为主,有可能覆盖或者撤销其他人的代码
例如有两个人A、B
A的本地分支为af
B的本地分支为bf
rel分支为relf
master分支为master
A、B、rel这三个分支都是基于master创建
master分支包含 1,2,3三个文件
bf分支
有两个操作
修改1文件中的内容,
向3文件末尾添加文件
提交代码 并且拉取到了rel分支中
af分支
有一个操作
修改了1文件中的内容
提交代码 并且拉取到rel分支,(此时有冲突了,因为两个分支都修改了1文件)
af本地merge了rel分支,
此时显示了冲突代码,
解决了冲突,并且只提交了冲突文件,将bf分支对3文件的添加内容撤回了
af拉取到rel分支
这时候查看rel分支会发现 bf添加到3文件中的代码消失不见了
因为af做了本地merge rel的操作,并且撤回了bf的操作后提交了,所以消失不见了,盲猜一波,合并的时候,将所有的提交记录重新定位到了之前未修改的统一位置,af再次提交的时候没有提交bf的修改,所以拉取后,导致代码被冲没了。
A的本地分支为af
B的本地分支为bf
rel分支为rel
master分支为master
A、B、rel这三个分支都是基于master创建
master分支包含 1,2,3三个文件
bf分支
有两个操作
修改1文件中的内容,
向3文件末尾添加文件
提交代码 并且拉取到了rel分支中
af分支
有一个操作
修改了1文件中的内容
提交代码 并且拉取到了rel分支,(此时有冲突了,因为两个分支都修改了1文件)
此时本地切换到rel分支
rel分支合并af分支,会显示af分支的所有提交记录,并且展示冲突的文件。不会影响到rel已经提交的内容。
此时解决冲突提交af即可
git 就是一个链表,每一个分支都是一个链表,每一个节点都是一个提交记录
af merge rel的时候 会以af为准,例如
af做了什么操作 最后会形成一个新版本提交上去
rel merge af的时候会以rel为准,修改的内容等都会提交上去
bf 提交到了 rel
af merge rel 的时候会以af为准,找到相同的版本后,ref(相同版本后其他人提交的代码)修改的内容都会提示给af,冲突删除等文件会进行提示是否提交(不提交就相当于将其他人的代码回退了),进行了修改之后形成新版本。此时如果再将af 拉取到 rel的话,此次合并也会拉取进去,并且替换为af为主的代码
bf 提交到了 rel
rel merge af 的时候会以rel为准,找到相同的版本后,af所修改的内容会提示给ref,冲突删除等会进行提示,不会影响ref原本的内容。形成新版本进行替换,此时提交rel后,冲突即可解决。
需要注意的就是,
af merge ref的时候需要将rel其他人的代码提交一并提交(不提交的话,别人的代码就会被回退了,因为是以af为准的)。
rel merge af的时候只需要提交自己修改过的代码与解决冲突文件即可。
总结,形成新版本后会进行版本的替换,以前面分支为主。