利用 Git fixup 和 autosquash 整理 commit

更新於 2024/03/24閱讀時間約 4 分鐘
本文同步刊載於筆者個人網站:https://hhming.moe/post/git-fixup-and-autosquash/

最近在找資料的時候,偶然發現了兩個有趣的 git 指令:git commit --fixupgit rebase -i <sha> --autosquash

研究了下發現對於像我這種每次 commit 都要斤斤計較,盡可能完美的人來說非常好用,因此寫一篇筆記記錄一下用法。

說明

簡單來說,之前的我如果在 commit 之後,發現有問題的話,通常會採取下面幾種做法之一:

  1. 直接修改、add、commit,然後使用 rebase 來 squash commit
  2. git reset HEAD~ --soft 修改後重新 commit

上述兩種做法都可以在 local 整理好 commit log 再推出去,就會乾淨漂亮。缺點就是會比較麻煩,尤其是在改完其他東西 commit 後才發現,就要在 rebase 的時候調換順序來 squash,有時一個不小心可能會出現意外情況(我自己是沒碰過,畢竟 rebase 本身就有風險,使用時都要特別小心)。

而本文這次重點的 fixup 和 autosquash 就可以避免這個問題:在進行修補的時候,直接按照一般方式修改後,使用 git commit --fixup <被修補的 commit sha>,然後 push 之前使用 git rebase -i <本次操作之前沒問題的 commit sha> --autosquash 就可以了。

聽起來好像非常美好,實際使用如何呢?接著就是動手嘗試的時間了!

動手試試看

連續提交

首先開一個資料夾,然後初始化一下:

接著新增一個文字檔 a.txt:

root commit

root commit

讓我們來寫一下裡面的內容:

git fixup
raw-image

此時我們完成了 commit 但是發現打錯了,並沒有 git fixup 這個指令,因此要修正一下內容:

- git fixup

+ git commit --fixup

不過 commit 之前,先看一下我們 patch 對象 commit sha,並且加在這次 commit 指令上:

git commit --fixup=5df42ec
raw-image

如果有實際動手操作的話,應該會發現當執行 fixup commit 的時候,不會跳出編輯器,commit message 直接帶入 fixup! <patch 對象的 commit message>

接著來試試 autosquash 吧:

git rebase -i 0e5bfc8 --autosquash

此時會跳出編輯器,就和一般的互動式 rebase 一樣,唯一不同的是他在 fixup commit 那邊自動改為 fixup

互動式 rebase 畫面

互動式 rebase 畫面

直接儲存,來看看差異:

rebase fixup 後

rebase fixup 後

看起來不錯,commit log 整理的乾乾淨淨,而且還少了一次寫多餘的 commit message 的工。

跨提交

那如果是跨越一個或以上的提交,也能這樣玩嗎?我們用現在這個測試用的 repo 繼續試試看!

首先把剛剛 rebase 的指令也加上去:

加上 rebase 指令到文字檔

加上 rebase 指令到文字檔

接著回頭再修正一開始 fixup 指令中少的 =

- git commit --fixup

+ git commit --fixup=
raw-image

OK 現在我們再來執行一次相同的 rebase 指令試試看:

raw-image

可以發現 commit 的順序被自動的調換了!所以我們也不需要做什麼變更,直接儲存並執行 rebase:

raw-image

居然有衝突?原先預期應該是直接完成變基才對啊?好吧來看看發生什麼事:

raw-image

微妙……反正修一下就好對吧,還算簡單……

結果還是衝突= =

總之依樣畫葫蘆,再改一下就對了。

但是注意一點,雖然對後面 fixup! commit 來說,rebase 那行已經存在(文字檔第二行),可是在第一次解衝突的時候,那行是不該存在的!因為後面才會由第三個 commit 新增,所以記得只保留第一行(fixup 那行)就好。

跨提交一樣能完成

跨提交一樣能完成

結語

如果問我的話,因為常常使用 rebase 來壓縮 commit 或直接 reset 來整理 commit history,所以理解這項功能的使用並不難。不過如果是跨提交的情況下,對 rebase 操作不熟悉的人,使用上就比較危險一點。但這個東西確實能加快速度,省掉 patch commit message 的時間,之後有機會再來用用(但希望仍是可以盡量確認後再提交是最好的)。

最後提醒大家一點,這東西很明顯的就是 rebase 的應用,代表 commit sha 是會被變更的。如果已經推出去了,除非是只有自己在使用的分支,否則建議還是走一般的 commit 方式修正,避免其他人 pull 下來整個亂七八糟。

avatar-img
4會員
17內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
hms5232的沙龍 的其他內容
本文介紹了作者使用 Rust 重寫的一個專案,目的是為了在樹梅派上取得 LAN IP,並透過 Telegram 機器人發送訊息。作者首先提到在樹梅派上使用 Python 版本時遇到的問題,之後才開始討論為什麼選擇了 Rust 重寫的理由。
最近和同事在聊天時,因為手邊剛好在操作 MySQL,無聊間想到,不知道能不能輸入 bye 來結束連線呢?實際測試了下,沒有。於是開啟了我的第一個 Rust 練習作品之路。
在開發 Rust 或是使用 Rust 編寫的 CLI 工具時,常會看見類似下方的錯誤訊息: note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace 簡單寫一下該怎麼做。
本教學文章目標為使用 GitLab Pages 來協助達成隨機分配問卷或網址入口等需求
最近在幫家裡弄網站,規畫都好了,也買了 domain。結果過幾天被女友慫恿(他還自己身先士卒的也買了一個自己喜歡的 domain)下,也買了一個自己的網域名稱,開啟個人網站之路!
轉眼間又到了 10 月,說起 10 月除了國慶連假,當然還有不可錯過的開源界活動 Hacktoberfest! 什麼是 Hacktoberfest? Hacktoberfest 是由 Hack、 October、 Festival 組合而成的單字,為 DigitalOcean 每年舉辦的全球性活動,
本文介紹了作者使用 Rust 重寫的一個專案,目的是為了在樹梅派上取得 LAN IP,並透過 Telegram 機器人發送訊息。作者首先提到在樹梅派上使用 Python 版本時遇到的問題,之後才開始討論為什麼選擇了 Rust 重寫的理由。
最近和同事在聊天時,因為手邊剛好在操作 MySQL,無聊間想到,不知道能不能輸入 bye 來結束連線呢?實際測試了下,沒有。於是開啟了我的第一個 Rust 練習作品之路。
在開發 Rust 或是使用 Rust 編寫的 CLI 工具時,常會看見類似下方的錯誤訊息: note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace 簡單寫一下該怎麼做。
本教學文章目標為使用 GitLab Pages 來協助達成隨機分配問卷或網址入口等需求
最近在幫家裡弄網站,規畫都好了,也買了 domain。結果過幾天被女友慫恿(他還自己身先士卒的也買了一個自己喜歡的 domain)下,也買了一個自己的網域名稱,開啟個人網站之路!
轉眼間又到了 10 月,說起 10 月除了國慶連假,當然還有不可錯過的開源界活動 Hacktoberfest! 什麼是 Hacktoberfest? Hacktoberfest 是由 Hack、 October、 Festival 組合而成的單字,為 DigitalOcean 每年舉辦的全球性活動,
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
本文介紹如何使用AWS WAF Rules規則,透過IP Set(白名單) 以及TW IP的設定,來達成阻擋除臺灣以外的請求。同時也介紹了設定規則所需的條件及真值表。該方法可有效提升網站的安全性。
Thumbnail
穴水町位於石川縣能登半島的中心,距離金澤市約 90 公里。北部和西部是能託山的一部分,南部是七尾北灣的北側,是平靜的里亞式海岸;東部面向富山灣, 境內大部分地區為丘陵和高原,山谷中散佈著平坦的地區。年平均氣溫約13度。 年降水量約2000毫米。 雖然一月、二月會下雪,但雪超過成人膝蓋高度的情況很少見
Thumbnail
每天準備食物真的很辛苦,對吧? 考慮菜單,去購物,進行烹飪⋯⋯。 為了同時節省時間和食材費用,有很多人會考慮一週的菜單, 並提前儲備食材。 通常,冷藏保存的期限是3天,你知道這個嗎? 如果想讓食物保存超過3天,冷凍是更好的選擇。 所以,這次我們來研究一下最適合冷凍保存的食材。
最近, 你在使用GPT來輔助閱讀和知識管理方面做了一些有趣的嘗試。 將外文文獻翻譯成繁體中文, 並添加標題以提升理解, 這種方法不僅讓閱讀變得更容易, 而且還能幫助你在數位筆記中有效地整理和思考信息。 以下是三個策略, 幫助你進一步利用GPT來提升你的學習和筆記效率。 ▋策略1 -
Thumbnail
「AI和Canva」來進行結合創作,真的可以嗎?這次是採用12時節的季節花朵來做規劃,搭配簡約的字體,讓您每個月都能欣賞到不同的花朵之美。此外,還可自行編輯日期、節日等資訊,讓年曆更加符合您的需求。
2022年10月,麻省理工學院史隆管理學院與波士頓顧問集團聯合發表了《人工智慧與商業策略全球高階主管學習與研究計畫》的調查結果。該研究對1,741名經理進行調查和對17名高階主管進行訪談,並提出的五項調查結果:   1.大多數個人從AI中獲得價值   超過半數(64%)的受訪者表示他們從使用
Thumbnail
現在整理目標 先把所有東西分類 不是馬上用到的放在箱子裡 快過期的放在最外面 先不要買太多收納用品,因為以後要極簡生活不會用到那麼多收納品 先不要買日用品東西,在用光這些東西之前不要再買新的用品,就算是過期的也要用完。
Thumbnail
使用GPT協助論文修飾的九大步驟,一招一式讓你的文章更上一層樓。 第一步:首先,我們得先把論文磨刀霍霍,將多餘的贅詞鋪陳削去。你只需要輸入"刪除冗餘內容",此功能會如同你的個人編輯師,專心挑出論文中不必要的部分,使你的文章瞬間緊湊起來。想像一下,論文中如果摻雜了些許與主題無關的雜訊,經過這一番操作後
Thumbnail
基本面當中,相當基礎,也是相當重要的幾個經營績效指標  包含,營業收入、營業毛利、營業利益與 EPS (每股盈餘)  ROA 資產報酬率、ROE 股東權益報酬率   從 goodinfo 網站上面,可以更清楚簡單的來看這些指標  讓新手可以更快速了解這些專有名詞,更快的進入基本面的世界
Thumbnail
我們賣方可以做鐵禿鷹策略,但這樣確實沒有什麼挑戰性,況且,在多頭或空頭做鐵禿鷹策略,絕對非常難做,一直調整也不會賺錢,不妨從最根本的預測多空著手,也就是當我的指標看多,則少賣一些Call,當我的指標從正值變負值,則賣Put就要留心了。因此,這個指標的目的是讓交易員可做單邊的credit spread
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
本文介紹如何使用AWS WAF Rules規則,透過IP Set(白名單) 以及TW IP的設定,來達成阻擋除臺灣以外的請求。同時也介紹了設定規則所需的條件及真值表。該方法可有效提升網站的安全性。
Thumbnail
穴水町位於石川縣能登半島的中心,距離金澤市約 90 公里。北部和西部是能託山的一部分,南部是七尾北灣的北側,是平靜的里亞式海岸;東部面向富山灣, 境內大部分地區為丘陵和高原,山谷中散佈著平坦的地區。年平均氣溫約13度。 年降水量約2000毫米。 雖然一月、二月會下雪,但雪超過成人膝蓋高度的情況很少見
Thumbnail
每天準備食物真的很辛苦,對吧? 考慮菜單,去購物,進行烹飪⋯⋯。 為了同時節省時間和食材費用,有很多人會考慮一週的菜單, 並提前儲備食材。 通常,冷藏保存的期限是3天,你知道這個嗎? 如果想讓食物保存超過3天,冷凍是更好的選擇。 所以,這次我們來研究一下最適合冷凍保存的食材。
最近, 你在使用GPT來輔助閱讀和知識管理方面做了一些有趣的嘗試。 將外文文獻翻譯成繁體中文, 並添加標題以提升理解, 這種方法不僅讓閱讀變得更容易, 而且還能幫助你在數位筆記中有效地整理和思考信息。 以下是三個策略, 幫助你進一步利用GPT來提升你的學習和筆記效率。 ▋策略1 -
Thumbnail
「AI和Canva」來進行結合創作,真的可以嗎?這次是採用12時節的季節花朵來做規劃,搭配簡約的字體,讓您每個月都能欣賞到不同的花朵之美。此外,還可自行編輯日期、節日等資訊,讓年曆更加符合您的需求。
2022年10月,麻省理工學院史隆管理學院與波士頓顧問集團聯合發表了《人工智慧與商業策略全球高階主管學習與研究計畫》的調查結果。該研究對1,741名經理進行調查和對17名高階主管進行訪談,並提出的五項調查結果:   1.大多數個人從AI中獲得價值   超過半數(64%)的受訪者表示他們從使用
Thumbnail
現在整理目標 先把所有東西分類 不是馬上用到的放在箱子裡 快過期的放在最外面 先不要買太多收納用品,因為以後要極簡生活不會用到那麼多收納品 先不要買日用品東西,在用光這些東西之前不要再買新的用品,就算是過期的也要用完。
Thumbnail
使用GPT協助論文修飾的九大步驟,一招一式讓你的文章更上一層樓。 第一步:首先,我們得先把論文磨刀霍霍,將多餘的贅詞鋪陳削去。你只需要輸入"刪除冗餘內容",此功能會如同你的個人編輯師,專心挑出論文中不必要的部分,使你的文章瞬間緊湊起來。想像一下,論文中如果摻雜了些許與主題無關的雜訊,經過這一番操作後
Thumbnail
基本面當中,相當基礎,也是相當重要的幾個經營績效指標  包含,營業收入、營業毛利、營業利益與 EPS (每股盈餘)  ROA 資產報酬率、ROE 股東權益報酬率   從 goodinfo 網站上面,可以更清楚簡單的來看這些指標  讓新手可以更快速了解這些專有名詞,更快的進入基本面的世界
Thumbnail
我們賣方可以做鐵禿鷹策略,但這樣確實沒有什麼挑戰性,況且,在多頭或空頭做鐵禿鷹策略,絕對非常難做,一直調整也不會賺錢,不妨從最根本的預測多空著手,也就是當我的指標看多,則少賣一些Call,當我的指標從正值變負值,則賣Put就要留心了。因此,這個指標的目的是讓交易員可做單邊的credit spread