Administrator
发布于 2024-06-25 / 18 阅读
0
0

git命令-rebase

解释

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:


评论