master (带 x1 修改) 创建 feature分支 (这时候这个feature分支等同于带x1的master)
然后 master 有了x2修改, feature 上面新增加了f1 修改
看起来就是 master x1, x2,然后feature有 x1, f1
feature把新的master合并,就是merge过来,那么feature上面的commit就是x1,x2,f1,当然也可能是 x1,f1,x2,看x2和f1提交的时间而定,如果x2和f1有修改到同一个文件重叠的部分,那就是有冲突,需要处理.
feature对新的master做rebase,那么feature分支上面一定就是x1,x2,f1这个顺序,当然如果有冲突还是要处理.
不同的地方是,如果master上面发生了回滚,就是从x1,x2变成了只有x1,但是,一个feature上面如果对master进行了合并,含有原来的x2提交的话,那么这个feature合并回master以后,这个x2就回去了,就是说master上再次包含了x2,这当然是不希望出现的情况.
如果这个分支是进行的rebase那么feature合并回去,master就是x1,f1的状态,x2不会被再写回去.
所以你同事叫你一定要rebase.背后的原则就是,不同的分支原则上必须是不相关的,只应该相对于master分支做新的提交,分支不应该覆盖包含其他的分支的提交.
我们有个it群,有兴趣你可以加进来. |