git rebase的使用

200 阅读2分钟

变基

场景:dev分支从master分支切出来之后,二者都各自有一些提交,此时要把dev分支合并到master分支上。

使用merge

# dev分支上使用git merge
git merge master

merge之后,出现分叉的提交记录,如果有冲突,手动解决冲突,再执行add和commit

然后在master分支,执行merge,此时是一次快进式合并,master分支直接快进到dev-c3

# master分支上快进式合并
git checkout master
git merge dev

使用rebase

git rebase master

执行rebase之后,dev分支上的提交,会基于master的最新提交之后,这就被称为变基,可以保持线性的提交记录

如果存在冲突,手动解决冲突,然后执行

git add ./
git rebase --continue

# 取消变基
# git rebase --abort

然后在master分支,执行merge,此时是一次快进式合并,master分支直接快进到dev-c2

 # master分支上快进式合并
git checkout master
git merge dev

合并多次提交

场景:对同一个功能commit了多次,想要合并这多次提交

使用如下命令:

git rebase -i HEAD~3

此时会出现交互式的窗口:

pick B Commit message B
pick C Commit message C
pick D Commit message D
pick E Commit message E
  • pick:保留提交
  • reword:保留提交但修改提交信息
  • edit:保留提交并允许你在提交时进行修改
  • squash:将该提交与前一个提交合并,并将它们的提交信息合并
  • fixup:类似于 squash,但不保留该提交的提交信息
  • drop:删除该提交

修改为:

pick B Commit message B
fixup C Commit message C
fixup D Commit message D
fixup E Commit message E

保存之后,多次提交就会被合并,提交记录就只会保留pick的那一次,如果想要修改提交信息,可以使用reword