#“分别比较两个分支提交的commit记录”详情如下:
分别将两个分支的commit记录,相对于当前需要合并的两个分支最近一次相同版本记录比较。
若一个分支有新变化,一个分支没有新变化,则有新变化的分支直接胜出。
此时,若两个分支合并,合并结果就是有新变化的那个分支内容,另外一个分支的内容会直接忽略掉。
注意:新建的分支,就相当于复制了一份原项目,所以版本会与原项目保持一致
#若将hot-fix合并到master分支上面,Git合并流程如下:
(1)Git会比较两个分支的commit记录。
(2)发现master分支,相对于当前需要合并的两个分支最近一次相同版本1,有新版本变化;
(3)而hot-fix分支,相对于当前需要合并的两个分支最近一次相同版本1,没有版本变化。
(4)结果:此时就不会发生合并。Git会提示你,已经合并过hot-fix分支,当前master分支还是处于版本2,不会发生任何改变。
#若将master合并到hot-fix分支上面,Git合并流程如下:
(1)Git会比较两个分支的commit记录。
(2)发现master分支,相对于当前需要合并的两个分支最近一次相同版本1,有新版本变化;
(3)而hot-fix分支,相对于当前需要合并的两个分支最近一次相同版本1,没有版本变化。
(4)结果:会发生合并。当前hot-fix分支,会被覆盖为master的版本2代码,版本也会成为,master版本2。但是合并过程,不会发生任何代码冲突,因为是直接覆盖代码。
#若将hot-fix合并到master分支上面,Git合并流程如下:
(1)Git会比较两个分支的commit记录。
(2)发现master分支,相对于当前需要合并的两个分支最近一次相同版本1,有新版本变化;
(3)而hot-fix分支,相对于当前需要合并的两个分支最近一次相同版本1,也有新版本变化;
(4)此时由于两个分支都有新版本变化,因此比较的时候,git会以master分支项目代码为基础,然后跟hot-fix分支项目进行比较,再将发现代码冲突的文件交给人为处理;至于hot-fix分支删除的原项目文件,也会给出提示让用户确认处理;至于hot-fix分支新增的文件,会在最后处理完冲突同意合并的时候,自动新增进项目分支。当然如果两个分支开发的业务逻辑功能完全是两个不相关的,也可能不会有任何冲突代码。(git会自动提醒开发人员解决冲突)
(5)结果:会发生合并。若有代码冲突以及删除确认等需要先解决完,才会合并代码。合并完后master分支还会自动提交到本地库,成为一个新版本。
#若将master合并到hot-fix分支上面,Git合并流程如下:
(1)Git会比较两个分支的commit记录。
(2)发现master分支,相对于当前需要合并的两个分支最近一次相同版本1,有新版本变化;
(3)而hot-fix分支,对于当前需要合并的两个分支最近一次相同版本1,也有新版本变化;
(4)此时由于两个分支都有新版本变化,因此比较的时候,git会从hot-fix项目代码中逐行比较,从其中某一行不同开始算起,一直到hot-fix分支项目的最后。这部分代码,都是冲突代码,需要人为处理一下。(git会自动提醒开发人员解决冲突)
(5)结果:会发生合并。但是需要先解决完冲突,才会合并代码。合并完后hot-fix分支还会自动提交到本地库,成为一个新版本。
注意:
(1)此时虽然看似hot-fix分支版本更高一些,但git并不会这么理解。无论你hot-fix分支版本迭代了多少次版本,git只会将hot-fix分支的当前最新版本,与当前需要合并的两个分支最近一次相同版本进行比较。有变化就直接视为新版本变化,无变化就是原版本。git并不会认为某个分支,比最近一次相同版本有很多版本变化。
(2)某个项目的不同分支,两两之间都会至少存在一次相同版本记录,不可能不存在。除非这完全是两个不同项目,但是那样合并就没有任何实际意义。那就相当于删除一个项目,保留另外一个项目了。人为手动删除不就得了,干嘛费劲开发一个版本控制工具git。
(3)所谓分支版本相同,就表示这两个分支里面的任何内容都完全一样。
#若将hot-fix合并到master分支上面,Git合并流程如下:
(1)Git会比较两个分支的commit记录。
(2)发现master分支,相对于当前需要合并的两个分支最近一次相同版本1,没有新版本变化;
(3)而hot-fix分支,相对于当前需要合并的两个分支最近一次相同版本1,没有新版本变化;
(4)结果:不会发生合并。git会提示已经合并过了
#若将master合并到hot-fix分支上面,Git合并流程如下:
(1)Git会比较两个分支的commit记录。
(2)发现master分支,相对于当前需要合并的两个分支最近一次相同版本1,没有新版本变化;
(3)而hot-fix分支,对于当前需要合并的两个分支最近一次相同版本1,没有新版本变化;
(4)结果:不会发生合并。git会提示已经合并过了
注意:git只会认识commit提交后的项目版本。如果你修改了代码,但是没有commit提交,git会仍然默认你是原来的版本,认为你没有经过任何修改。
#若将hot-fix合并到master分支上面,Git合并流程如下:
(1)Git会比较两个分支的commit记录。
(2)发现master分支,相对于当前需要合并的两个分支最近一次相同版本1,没有新版本变化;
(3)而hot-fix分支,相对于当前需要合并的两个分支最近一次相同版本1,有新版本变化;
(4)结果:在IDEA中合并会发生,但是会失败。因为你master中间代码没有提交,IDEA为了防止覆盖你的代码,所以会拒绝自动合并。
但是在git命令执行中,就不太清楚了。读者可以试一试(master分支代码,应该会被直接覆盖合并为hot-fix的版本代码)。
#若将master合并到hot-fix分支上面,Git合并流程如下:
(1)Git会比较两个分支的commit记录。
(2)发现master分支,相对于当前需要合并的两个分支最近一次相同版本1,没有新版本变化;
(3)而hot-fix分支,对于当前需要合并的两个分支最近一次相同版本1,有新版本变化;
(4)结果:IDEA中不会发生合并。在你强制切换分支的时候,未提交代码会丢失。然后git会提示已经合并过了。
答:这个先 commit 再 pull 最后再push 的情况就是为了应对多人合并开发的情况,