1. 程式人生 > >git rebase的用法

git rebase的用法

mod 內容 例子 分享圖片 窗口 ont ash repo checkout

改變基

    技術分享圖片

  一個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的用法