到如今咱們已經學習了Git的基礎知識,包括:java
概念涵蓋了Git 90%的功能,一樣也足夠知足開發者的平常需求。git
然而, 剩餘的10%在處理複雜的工做流時(或者當你陷入困惑時)可能就顯示尤其重要了。shell
接下來要討論的這個話題是「整理提交記錄」 :開發人員有時會說「我想要把這個提交放到這裏,那個提交放到剛纔那個提交的後面
」, 而接下來就講的就是它的實現方式,看起來挺複雜, 實際上是個很簡單的概念。微信
第一個命令是git cherry-pick
, 命令形式爲:編輯器
git cherry-pick <提交號>...
複製代碼
若是你想將一些提交複製到當前所在的位置(HEAD)下面的話,cherry-pick是最直接的方式了。我我的很是喜歡cherry-pick,由於它特別簡單。ide
我們仍是經過例子來看一下!post
這裏有一個倉庫, 咱們想將 side 分支上的工做複製到 master 分支,你馬上想到了以前學過的rebase
了吧?可是我們仍是看看 cherry-pick有什麼本領吧。學習
git cherry-pick C2 C4
複製代碼
這就是了!咱們只須要提交記錄C2和C4,因此Git就將被它們抓過來放到當前分支下了,就是這麼簡單!this
當你你知道你所須要的提交記錄(而且還知道這些提交記錄的哈希值)時, 用cherry-pick再好不過了,沒有比這更簡單的方式了。spa
可是若是你不清楚你想要的提交記錄的哈希值呢?
幸虧Git幫你想到了這一點, 咱們能夠利用交互式的rebase,若是你想從一系列的提交記錄中找到想要的記錄, 這就是最好的方法了
我們具體來看一下:
交互式rebase指的是使用帶參數--interactive
的rebase命令, 簡寫爲-i
若是你在命令後增長了這個選項, Git會打開一個UI界面並列出將要被複制到目標分支的備選提交記錄,它還會顯示每一個提交記錄的哈希值和提交說明,提交說明有助於你理解這個提交進行了哪些更改。
在實際使用時,所謂的UI窗口通常會在文本編輯器:如Vim中打開一個文件。
當rebase UI界面打開時, 你能作3件事:
接下來看下具體命令:
能夠看到:
更改子提交pick爲edit,表示須要修改這次提交;而後reset到須要拆分的上次提交,可是保留工區的內容,再依次commit工做區中的內容。
更改子提交 pick 爲squash,表示與當前提交的父提交合並。
更改子提交 pick 爲reword,表示修改歷史提交信息。
修改pick爲drop, 或者直接刪除所在的行。
相信你們對Git移交提交記錄已經基本掌握,不妨在本身的git環境中動手試一試吧~