解释
rebase ,中文:变基 ; 作用:合并代码和整理提交记录
示例
现在有2条分支 ,master 和 featuer ; feature 分支 是从master 的 b 分出来的
master - a - b - m
feature \ - c - d
现在需要将,feature c ,d 提交到主分支上去
master - a - b - m - c - d
feature \ - c - d
rebase 和 merge 的区别
rebase 会把你当前分支的 commit 放到公共分支的最后面,所以叫变基。就好像你从公共分支又重新拉出来这个分支一样。
举例 :如果你从 master 拉了个feature分支出来,然后你提交了几个 commit, 这个时候刚好有人把他开发的东西合并到 master 了,这个时候 master 就比你拉分支的时候多了几个 commit,如果这个时候你 rebase master 的话,就会把你当前的几个 commit,放到那个人 commit 的后面。
merge 会把公共分支和你当前的commit 合并在一起,形成一个新的 commit 提交
*作用1:合并代码
//切换分支
git checkout feature
//将分支内容提交到主线上
git rebase main
//来完全取消变基。这么做会取消变基修改,并将分支置回到执行git rebase之前的状态。
git rebase –abort
//来完全忽略该提交。这样,有问题的提交所引入的变化就不会被添加到历史中。
git rebase –skip
// 在解决冲突后,使用这个选项继续 rebase 操作。
git rebase -continue
作用2:修改提交记录
可交互式rebase让你在把变更提交给其他分支之前有机会对提交记录进行修改。这甚至比自动rebase操作更强大,毕竟它提供了对于分支提交历史的完全掌控力。通常来说这一操作的使用场景在于合并功能分支到main分支之前,对于功能分支杂乱的提交记录进行整理。
进行可交互式rebase操作,需要向git rebase命令传递i选项参数
git checkout feature
git rebase -i main
执行以上命令会打开一个文本编辑器,其中内容为分支中需要移动的所有提交列表:
pick 33d5b7a Message for commit #1
pick 9480b3d Message for commit #2
pick 5c67e61 Message for commit #3
上面这样的列表正表示了分支被rebase之后其历史的长相。通过修改pick命令或者对提交历史进行重新排序,你可以让最终的提交历史变成任何你希望的样子。比如说,如果第二次提交修复了第一次提交的什么BUG,你可以使用fixup命令替代pick来把两次提交压缩在一起。
pick 33d5b7a Message for commit #1
fixup 9480b3d Message for commit #2
pick 5c67e61 Message for commit #3
当你保存并关闭这个文件之后,Git会根据你的调改结果执行rebase操作,根据上面的例子项目历史会变成下图这样:
反例
想一想如果把main分支rebase到feature分支之上,会发生什么:
总结
在任何一种工作流中,如果我们希望让rebase介入其中,那么第一步就是为功能开发创建一个专用分支。这样可以提供必要的分支结构以便安全地使用rebase: