git rebase 命令

git rebase 命令
git rebase是一個非常有用的命令,但可能熟悉它的人比較少。下面介紹一下git rebase的常見用法。

git rebase branch

我們在作分支合并的時候最常用的就是merge操作,但是執(zhí)行merge之后,會產生一個新的commit,例如:Merge branch 'branch-1'。這個commit把兩個branch合并到一起并作了一次新的提交。但是,如果使用rebase的話就會避免這個問題。我們來看一個例子,下邊是我分別用merge和rebase之后的git log。

* 5eaa8f8 (HEAD -> master) commit 8
* fdadab0 commit 7
* 690e761 (branch-2) commit 10
* f8bcb41 commit 9
*   a1e3e91 Merge branch 'branch-1'
|\  
| * da2448e (branch-1) commit 6
| * c4ef94a commit 5
* | c70cc70 commit 4
* | 31fde3f commit 3
|/  
* faf3890 commit 2
* 0f1f7a8 commit 1

我的操作歷史如下:首先,在master創(chuàng)建進行了兩次提交(commit 1, commit 2)-> checkout新的分支branch 1 -> 在master上進行兩次提交(commit 3, commit 4)-> 在branch 1上進行兩次提交(commit 5, commit 6)-> checkout到master,執(zhí)行git merge branch-1。然后merge完成后便產生了a1e3e91 Merge branch 'branch-1'這個提交。

接著我們演示rebase,checkout 新分支branch 2 -> 在master上進行兩次提交(commit 7,commit 8)-> checkout到branch 2上,進行兩次提交(commit 9, commit 10)-> checkout到master執(zhí)行git rebase branch-2。這時我們來看主干分支,并沒有產生多余的提交。

git rebase branch-2命令執(zhí)行的時候會把"master"(即當前分支)分支里的每個提交(commit)取消掉,并且把它們臨時保存為補丁patch(這些補丁放到".git/rebase"目錄中),然后把"master"分支更新到最新的"branch-2"分支,最后把保存的這些補丁應用到"master"分支上。這些新應用的commit將會是新的commit,commit號會變。上例中commit 7,commit 8的commit號已經變了(原有的commit號分別是:cc4df2d,c86a6da)。

git pull --rebase

當我們從遠程拉代碼的時候如果使用:git pull --rebase,則會以rebase的方式進行更新,而不是默認的merge。

git rebase --interactive

git rebase用來修復commit,比如修改某次提交,修改commit message,squash。該命令可以簡寫為git rebase -i。執(zhí)行該命令之前需要當前branch已經設定過upstream,使用git branch --set-upstream-to=<remote>/<branch>可以設定upstream。執(zhí)行rebase -i命令后的交互如下,我已經針對commit做了修改:

GNU nano 2.5.3                    File: /home/focusj/3stone/diamond/.git/rebase-merge/git-rebase-todo                                                

pick c4a4b5d test
squash c4a4b6d test
drop c4a4b7d test

# Rebase 0df8fd7..c4a4b5d onto 0df8fd7 (1 command(s))
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
                                                                 [ Read 20 lines ]
^G Get Help     ^O Write Out    ^W Where Is     ^K Cut Text     ^J Justify      ^C Cur Pos      ^Y Prev Page    M-\ First Line  M-W WhereIs Next
^X Exit         ^R Read File    ^\ Replace      ^U Uncut Text   ^T To Spell     ^_ Go To Line   ^V Next Page    M-/ Last Line   M-] To Bracket

下邊說下幾個command的用處:
p:保留當前commit,不做處理。
r:修改commit message。
e:修改這個commit作的修改。比如某個commit漏掉了什么配置,想要再提交新的文件; 或者刪除一些無用代碼,等等都可以用這個命令。
s:保留這個commit的修改,但是把它合并到前一個commit中。
d:刪除commit。
我們使用命令,只需要把命令放到mouge commit前邊保存退出既能生效。


write on 2017-1-3

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • git常用命令 GIT常用命令備忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章閱讀 8,867評論 1 26
  • 知道為什么間書的昵稱叫Juan(卷)柏嗎? 卷柏是一種植物生命力很頑強!它可以在干掉后浸在水中,當溫度...
    Juan柏閱讀 662評論 0 0
  • 《100天帶好一個團隊》 進度#301 主題: 團隊溝通 001你所做的每一件事都是溝通,沒有確定當務之急的情況下...
    海鷗老師閱讀 167評論 0 0
  • “中年危機”在百度百科的解釋是:中年危機,也稱“灰色中年”,一般高發(fā)在39~50歲,在40~65歲之間的男性身上,...
    Aaron35閱讀 418評論 0 1

友情鏈接更多精彩內容