git rebase的用法
改變基
一個git庫,開發人員在master分支的Bcommit的時候,創建了一個dev分支,此時Bcommit是dev分支的基,然後分別進行兩個分支的開發。
進行到master提交了Dcommit,而dev分支提交到了Zcommit,如果此時需要將dev分支的基切換為D,那麽可以用下面這個命令:
git checkout dev #切換到dev分支 git rebase master #將master最新的commit作為基
執行這個命令時,可能會有分支沖突,解決沖突之後,進行如下操作:
# 解決沖突 git add xxx git rebase --continue
進行完這些操作後,分支的情況就如下圖了:
使用git log來查看提交日誌,可以看到dev分支的x、y、z的提交次序變到了maste分支的Dcommit後面。
也就是說,這裏進行了一個git merge。
拓展:如果要將下面的test分支基變為master分支的D,那麽可以使用git rebase --onto master dev^ test
合並提交記錄
首先看下面這個例子:
[root@centos demo]# git init Initialized empty Git repository in /root/demo/.git/ [root@centos demo]# echo one >> a.txt [root@centos demo]# git add a.txt [root@centos demo]# git commit -m "first commit" [master (root-commit) b7ee3a2] first commit 1 file changed, 1 insertion(+) create mode 100644 a.txt [root@centos demo]# echo two >> a.txt [root@centos demo]# git commit -am "second commit" [master 92ae9c4] second commit 1 file changed, 1 insertion(+) [root@centos demo]# echo three >> a.txt [root@centos demo]# git commit -am "third commit" [master 0985eec] third commit 1 file changed, 1 insertion(+) [root@centos demo]# echo four >> a.txt [root@centos demo]# git commit -am "four commit" [master 5bd480c] four commit 1 file changed, 1 insertion(+) [root@centos demo]# git show-branch --more=4 #查看四次提交記錄 [master] four commit [master^] third commit [master~2] second commit [master~3] first commit
上面代碼進行了4次提交,但是現在有個需求,將這四次提交的合並為一個提交,提交信息整合一下,改成"four commit"
可以這麽做:
[root@centos demo]# git rebase -i master~3 #會啟動vi編輯器,頂部顯示的內容如下: pick 92ae9c4 second commit pick 0985eec third commit pick 5bd480c four commit
然後將上面這三行中,後面兩行的pick替換為squash,即下面這個樣子:
pick 92ae9c4 second commit #將後面兩次的pick改成squash,然後保存退出 squash 0985eec third commit squash 5bd480c four commit
保存退出後,又會打開一個vim編輯器窗口,內容如下:
# This is a combination of 3 commits. # This is the 1st commit message: second commit # This is the commit message #2: third commit # This is the commit message #3: four commit
從上面三個commit信息,就是會顯示在合並後的那個commit提交信息,如果原封不動的話,那麽三次提交合並為一個提交之後,這一個提交就會有三行提交comment。
當然,可以使用#來註釋其中的某幾條comment,或者修改其中的comment,都行。
比如我只想保留最後一次提交comment,那麽可以向下面這麽做:
# This is a combination of 3 commits. # This is the 1st commit message: #second commit # This is the commit message #2: #third commit # This is the commit message #3: four commit
然後保存並退出,不出意外的話,現在已經合並提交成功了。
可以查看一下提交記錄:
[root@centos demo]# git show-branch --more=4 [master] four commit [master^] first commit
同時,文件的內容也沒有發生改變:
[root@centos demo]# cat a.txt one two three four
git rebase的用法