[TOC] #### 1. git rebase 介紹 ---- git rebase 最大的作用是可以重寫歷史(重寫提交記錄) 合理使用 rebase 命令可以使我們的提交歷史干凈、簡(jiǎn)潔 ! rebase 在 git 中是一個(gè)非常有魅力的命令,使用得當(dāng)會(huì)極大提高自己的工作效率;如果亂用,會(huì)給團(tuán)隊(duì)其他人帶來麻煩 #### 2. 將多個(gè) commit 合并為一個(gè) commit --- 相信絕對(duì)大多數(shù)公司都會(huì)有這個(gè)要求: 每天下班前必須將當(dāng)天的代碼推送到遠(yuǎn)程庫,但是今天在本地做了多次提交記錄,你想要將今天的多次提交記錄合并為一個(gè)提及記錄,然后再推送到遠(yuǎn)程庫。此時(shí),使用 git rebase 命令可以實(shí)現(xiàn)你的目的 有這樣一個(gè)倉庫,當(dāng)前有 5 個(gè)提交記錄,我想要將最后三次的提交記錄合并為一個(gè)提交記錄  使用下面命令進(jìn)行提交記錄的合并,`-i, --interactive` 參數(shù)的作用是以交互式的界面讓用戶編輯完成合并的操作 ``` git rebase -i HEAD~3 ``` 也可以使用 ``` git rebase -i 2402738 ``` 執(zhí)行命令后進(jìn)入以下界面,修改完成后使用 `:wq` 保存退出  指令編輯區(qū)域: 本次 rebase 操作包含的所有提交,每一個(gè) commit id 前面的 pick 表示指令類型 指令說明區(qū)域: 指令類型說明,rebase 的指令類型有以下幾種 | 指令 | 縮寫 | 描述 | | ------------ | ------------ | ------------ | | pick | p | 保留該 commit | | reword | r | 保留該 commit,修改該 commit 的注釋 | | edit | e | 保留該 commit,修改該 commit,不僅僅是注釋 | | squash | s | 將該 commit 和前一個(gè) commit 合并 | | fixup | f | 將該 commit 和前一個(gè) commit 合并,但不保留該提交的注釋 | | exec | x | 執(zhí)行 shell 命令 | | drop | d | 丟棄該 commit | rebase 指令類型編輯界面修改完成后進(jìn)入注釋修改界面,修改完成后使用 `:wq` 保存退出  合并成功后的提示  將合并成功后結(jié)果推送至遠(yuǎn)程庫時(shí)會(huì)報(bào)錯(cuò),必須使用 -f 參數(shù)進(jìn)行強(qiáng)制推送才行  剛才我們是將遠(yuǎn)程庫中的多個(gè) commit 合并為一個(gè) commit,下面來測(cè)試將本地的多個(gè) commit 合并為一個(gè) commit  合并最新的 4 個(gè)提交記錄 ``` git rebase -i HEAD~4 ``` 話不說多,直接上操作流程圖    總結(jié): 合并遠(yuǎn)程庫中的多個(gè) commit 推送時(shí)需要強(qiáng)制推送,合并多個(gè)未推送到遠(yuǎn)程庫的多個(gè)本地 commit,不需要強(qiáng)制推送。平時(shí)開發(fā)中,合并本地的多個(gè) commit 還比較實(shí)用,已推送到遠(yuǎn)程庫中的 commit 不建議輕易的去修改它