項目 widget-area-1 尚未註冊或是沒有一個 view.php 檔案.
項目 widget-area-1 尚未註冊或是沒有一個 view.php 檔案.
項目 search-input 尚未註冊或是沒有一個 view.php 檔案.

【Git 協作相關 #1】git rebase – 重新整理 commit 的好幫手, 合併 commit

前言

當 commit 一多,有時候我們只是修改了一行,甚至只是為美觀加一個換行,
這時候我們就會想要「整理我們的 commit」,
雖然說是隨時都可以整理,但最常發生在我們完成一個功能時,想要整理我們的 commit。

方法有很多種,這裡我們介紹最萬用的 git rebase,
至於 git commit –amend 或是 重開新 branch 後 cherry-pick 等一些其他的方式,
這裡因為不是文章的重點,我就只先留關鍵字給大家自己找啦XD

git rebase 用途

git rebase 可以看到「從”過去某個commit”的到”現在”,過程中的所有 commit」,
我們可以重新整理這段時間的 commit 內容,

git rebase 用法

個人最常使用的是

git rebase -i <過去某時間點的 commit id>

其中 i,代表 Interactive,我們會開啟一個互動的視窗,讓我們可以調整 commit

範例

我們寫了三個 commit 1,2,3 也對應到他們分別的 commit message,
我們可以用 git log –oneline 快速看一下 (oneline 就是只顯示一行,也就是我們的重點內容)

git log --oneline

上面我們可以看到我們的三個 commit 對應到他們的 commit id

重組 commit

我們針對 commit 1 輸入以下指令,
我們就可以針對到現在的 commit 2,3 進行 commit 重組,不包含我們輸入的 commit 1

git rebase -i 72f1 # (不用打完整,也能智慧搜尋)

然後我們就會進到以下的互動式畫面,這裡其實下面都有很明顯的提示用法了,
我自己最常用的操作是 pick, squash(與前一個組合),

在這個例子中就可以改成:

  • 原本進來看到都會是 pick,表示這些 commit 都有被使用。

時間的關係是越下面越新,記法:太舊的 commit 相對比較不重要了,因此被顯示上被卷上去也沒差
我們把第三個 commit 寫 squash (也可以簡寫 s,參考下方提示),這個時候我們就會把 commit 2,3 合併成一個,
而因為變成了一個 commit,勢必要重新計算 commit id,
但 「commit 對文件的改動」是已經被合併成一個的

  • 於是原本是長這樣的 commit

  • 修改後,會把 commit 3 squash(合併)至 commit 2,變成這樣

但因為內容有所改動,commit id 需要重算,
保留文件的修改與 commit messge (commit 3 整併至 commit 2)

後話,與一些比較進階,這裡沒提到的部分

當然這邊也有比較進階的操作,但因為也是容易出錯的操作,
這裡不會太詳細介紹,(比較針對新手夠用就好XD,像目前的我),

例如 drop 可以丟棄一個 commit,這裡的 commit 順序也能夠直接更改,
這有時候會造成時空的錯亂,導致無法順利完成,
真的要操作的話,請務必注意時間上的相依性
也就是說,因為先有 A 才有 B,先有 B 才有 C,
如果我們把 B 拿掉,照理來說 C 就不應該出現。類似這樣的問題很多也很難處理…

因此我通常也不太會用這個指令來整理,頂多就是開一個新的 branch,
把最後的結果 cherry-pick 過來後建立一個新的 combine 後的 commit,
讓 commit 看起來就很乾淨了 XD

reference

⭐Git 相關文章整理⭐:
1.【Git】1 – 簡單開始學 git,認識 git 與基本觀念、心態建立,初學者學習 git 碰壁的原因 與 建議學習 git 的方式
2.【Git】git 初學者向 – 最簡單直白的理解 git 基本介紹 與 基本使用 (內有範例程式碼) 總整理 大全
3.【Git】git ignore 設定方法筆記,在 git add 時 固定不要特定檔案 git add remove
⭐【喜歡我的文章嗎? 歡迎幫我按讚~ 讓基金會請創作者喝一杯咖啡!
如果喜歡我的文章,請幫我在下方【按五下Like】 (Google, Facebook 免註冊),會由 「LikeCoin」 贊助作者鼓勵繼續創作,讀者們「只需幫忙按讚,完全不用出錢」哦!