首先来看应用场景:咱们要修改以前某一个特定的commit的时候,就须要用到这个命令。git
假如以前的某个提交的上一笔commit id是:928fc8a3686bf5fcf4527873e075703a9998c127bash
git log #查看commit id 找到上一笔commit id git rebase 928fc8a3686bf5fcf4527873e075703a9998c127 --interactive或者-i
//注意,必定要上一笔,为何呢?实际上rebase翻译过来就是变基,简而言之,就是变动为基于哪一笔提交上的提交, 这里指的“哪一笔”就是须要修改的提交的上一笔了。
而后在vi中修改pick为edit,wq保存退出,接着进行内容修改,git add
后git commit --amend
最后git rebase --continue
便可再次回到最新的头部ui
//git rebase --continue 做为整个操做的结束动做,因此必定要执行。spa
接下来看下一些具体场景:翻译
1.有的时候,咱们从远程git同步代码时候会有如下信息:code
上传新提交的时候,也会由于这笔记录的格式问题报错,blog
此时用git rebase 92320630cbf41f656361271110c6fc1298b1ec19 -i,而后不作任何修改,wq保存退出,这笔merge信息就没有了。个人理解是跟不加参数-i是同样的。ip
2.当执行git rebase 92320630cbf41f656361271110c6fc1298b1ec19 -i 后有多笔提交的时候,同步
如:it
pick xxxxxx
pick xxxxxx
pick xxxxxx
能够删除不相关的几笔提交,只留下要修改的那笔pick xxxxxx, 这样的作的好处,就是git commit 以后,进行repo upload 的时候,不会出现其余几笔提交也从新上传一次。个人理解是若是多个pick, 那么这几笔都从新rebase到了须要的修改的上一笔提交上。
若是只剩下须要修改的那一笔,那么只是对须要修改的那一笔进行rebase。
3. 若是中途出错,可使用git rebase --skip 来重置