git rebase 的妙用

首先來看應用場景:咱們要修改以前某一個特定的commit的時候,就須要用到這個命令。git

假如以前的某個提交的上一筆commit id是:928fc8a3686bf5fcf4527873e075703a9998c127bash

git log #查看commit id 找到上一筆commit id git rebase 928fc8a3686bf5fcf4527873e075703a9998c127 --interactive或者-i
//注意,必定要上一筆,爲何呢?實際上rebase翻譯過來就是變基,簡而言之,就是變動爲基於哪一筆提交上的提交, 這裏指的「哪一筆」就是須要修改的提交的上一筆了。

而後在vi中修改pick爲edit,wq保存退出,接着進行內容修改,git addgit 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 來重置

相關文章
相關標籤/搜索