1.Git的分支本质是一个名称为分支名,指向最新提交的一个指针, 每次提交都会更新header指向最新提交的hash;
2.Git的提交是一个链表结构,除了首次提交,后续的每次提交都至少有一个父提交(parent),如果有两个父提交,说明进行了一次merge commit.
3.rebase本质上也是完成一次合并动作,和merge的区别就是,将最新的提交放在base分支的最新提交的前面,保证提交的简洁,不会有很多支线.因此能merge的地方都可以用rebase,需要注意的是,不要针对已经推送远程的提交进行
4.rebase的实际使用场景:
1)最常用:git pull --rebase,从远程拉取代码时,会执行merge,可以以rebase的方式
bash
# 拉取远程更新,并把本地提交放在最前面
git pull --rebase
# 简写
git pull -r
- 把一个分支 rebase 到另一个分支,
bash
# 当前在 feature 分支,把它 rebase 到 main 上
git checkout feature
git rebase main
# 或者一步到位
git rebase main feature
3).交互式 rebase:git rebase -i,这是最强大的功能,可以整理你的提交历史
bash
# 对最近 3 个提交进行操作
git rebase -i HEAD~3
# 或者从某个 commit 开始
git rebase -i <commit-hash>
注意:只 rebase 你一个人的分支,永远不要 rebase 别人也在用的分支。