A-----B----C----D master
E----F-----G feature
为了把main分支里新增的代码应用在你的feature分支,你有两种方法:merge 和 rebase。
- merge
git checkout feature
git merge main
A-----B----C----D master
E----F-----G -----* feature (合并master的更改)
每当feature分支需要应用上游分支的更改时,都会在提交历史上增加一个无关的提交历史。如果main分支的更新非常活跃,这种操作也会对功能分支的提交历史产生相当程度的污染。
- rebase
git checkout feature
git rebase main
A-----B----C----D master
E----F-----G feature (feature分支的起始历史放到main分支的最后一次提交之上)
相对于merge操作中新建一个合并提交,rebase操作会通过为原始分支的每次提交创建全新的提交,从而重写原始分支的提交历史。
优点:让项目提交历史变得非常干净整洁
缺点:ebase操作丢失了合并提交能够提供的上下文信息——所以你就无法知道功能分支是什么时候应用了上游分支的变更
rebase 黄金法则:永远不要在公共分支上使用