首先來看應用場景:我們要修改之前某一個特定的commit的時候,就需要用到這個命令。
假如之前的某個提交的上一筆commit id是:928fc8a3686bf5fcf4527873e075703a9998c127
git log #查看commit id 找到上一筆commit id git rebase 928fc8a3686bf5fcf4527873e075703a9998c127 --interactive或者-i
//注意,一定要上一筆,為什么呢?實際上rebase翻譯過來就是變基,簡而言之,就是變更為基於哪一筆提交上的提交, 這里指的“哪一筆”就是需要修改的提交的上一筆了。
然后在vi中修改pick為edit,wq保存退出,接着進行內容修改,git add
后git commit --amend
最后git rebase --continue
即可再次回到最新的頭部
//git rebase --continue 作為整個操作的結束動作,所以一定要執行。
接下來看下一些具體場景:
1.有的時候,我們從遠程git同步代碼時候會有以下信息:
上傳新提交的時候,也會因為這筆記錄的格式問題報錯,
此時用git rebase 92320630cbf41f656361271110c6fc1298b1ec19 -i,然后不做任何修改,wq保存退出,這筆merge信息就沒有了。我的理解是跟不加參數-i是一樣的。
2.當執行git rebase 92320630cbf41f656361271110c6fc1298b1ec19 -i 后有多筆提交的時候,
如:
pick xxxxxx
pick xxxxxx
pick xxxxxx
可以刪除不相關的幾筆提交,只留下要修改的那筆pick xxxxxx, 這樣的做的好處,就是git commit 之后,進行repo upload 的時候,不會出現其他幾筆提交也重新上傳一次。我的理解是如果多個pick, 那么這幾筆都重新rebase到了需要的修改的上一筆提交上。
如果只剩下需要修改的那一筆,那么只是對需要修改的那一筆進行rebase。
3. 如果中途出錯,可以使用git rebase --skip 來重置