如何克服解決Git衝突的恐懼症?(Git移交提交記錄)

到如今咱們已經學習了Git的基礎知識,包括:java

概念涵蓋了Git 90%的功能,一樣也足夠知足開發者的平常需求。git

然而, 剩餘的10%在處理複雜的工做流時(或者當你陷入困惑時)可能就顯示尤其重要了。shell

接下來要討論的這個話題是「整理提交記錄」 :開發人員有時會說「我想要把這個提交放到這裏,那個提交放到剛纔那個提交的後面」, 而接下來就講的就是它的實現方式,看起來挺複雜, 實際上是個很簡單的概念。微信

git cherry-pick

第一個命令是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

交互式rebase

當你你知道你所須要的提交記錄(而且還知道這些提交記錄的哈希值)時, 用cherry-pick再好不過了,沒有比這更簡單的方式了。spa

可是若是你不清楚你想要的提交記錄的哈希值呢?

幸虧Git幫你想到了這一點, 咱們能夠利用交互式的rebase,若是你想從一系列的提交記錄中找到想要的記錄, 這就是最好的方法了

我們具體來看一下:

交互式rebase指的是使用帶參數--interactive的rebase命令, 簡寫爲-i

若是你在命令後增長了這個選項, Git會打開一個UI界面並列出將要被複制到目標分支的備選提交記錄,它還會顯示每一個提交記錄的哈希值和提交說明,提交說明有助於你理解這個提交進行了哪些更改。

在實際使用時,所謂的UI窗口通常會在文本編輯器:如Vim中打開一個文件。

當rebase UI界面打開時, 你能作3件事:

  • 調整提交記錄的順序
  • 刪除你不想要的提交
  • 合併提交

接下來看下具體命令:

能夠看到:

  • 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

拆分提交記錄 edit

更改子提交pick爲edit,表示須要修改這次提交;而後reset到須要拆分的上次提交,可是保留工區的內容,再依次commit工做區中的內容。

合併提交記錄 squash

更改子提交 pick 爲squash,表示與當前提交的父提交合並。

批量修改歷史提交信息 reword

更改子提交 pick 爲reword,表示修改歷史提交信息。

刪除歷史紀錄

修改pick爲drop, 或者直接刪除所在的行。

相信你們對Git移交提交記錄已經基本掌握,不妨在本身的git環境中動手試一試吧~

微信公衆號: 碼上論劍
請關注個人我的技術微信公衆號,訂閱更多內容
相關文章
相關標籤/搜索