ログイン新規登録

Qiitaにログインして、便利な機能を使ってみませんか?

あなたにマッチした記事をお届けします

便利な情報をあとから読み返せます

349
229

この記事は最終更新日から1年以上が経過しています。

git commit --fixup が便利

最終更新日 投稿日 2022年04月13日

始めに

私は最近エンジニアに復帰し、現場で便利に思ったことを今後記事にできたらと思っています。
そして1発目は、gitのオプションについて記事を書いてみようと思います。

--fixup はどんな時に使えるの?

Pull Requestなどで、軽微な指摘や後から気付いた修正など、本来の機能のコミットとは別に修正コミットを残すのは少し嫌な時がありますよね。
コミットが一つ手前であれば、直前のコミットを修正してくれる git commit --amendなどで対応できますが、3つ前のコミットに修正を混ぜ込みたい時などは、少し大変。
そんな時に便利なのが、この git commit --fixupです。

使い方

例えば、下記のコミットの状況で、Fix article pageのコミットに対して、追加の修正をしたいとする。

❯ git log --oneline
1131338365 (HEAD -> edit_article_page) Fix settings page
9c57cb3e7a Fix article page
ab6a6bef9d Add column
cgbaeef9d3 (master) Initial commit

追加の修正をし、追加のコミットをする際に、--fixup <引数> を使います。
引数には まとめたいコミットのハッシュ値を指定します。

❯ git add .
❯ git commit --fixup 9c57cb3e7a

まとめたいコミットメッセージの頭に fixup! の文字がついたコミットが出来上がります。

❯ git log --oneline
26a2dc16a8 (HEAD -> edit_article_page) fixup! Fix article page
1131338365 Fix settings page
9c57cb3e7a Fix article page
ab6a6bef9d Add column
cgbaeef9d3 (origin/master, master) Initial commit

これでコミットをまとめる下準備が完了。

最後に、git rebase -i --autosquash <引数> を実行します。
※autosquashは、fixup! で始まるコミットメッセージ名のコミットをまとめます。

どのコミット以降に対してautosquashを実行するかを引数に指定する必要があるので、HEAD~4を指定します。

❯ git rebase -i --autosquash ab6a6bef9d
pick ab6a6bef9d Add column
pick 9c57cb3e7a Fix article page
fixup 26a2dc16a8 fixup! Fix article page
pick 1131338365 Fix settings page

# Rebase 671ca6fcee..f235308862 onto 671ca6fcee (4 commands)
#
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup [-C | -c] <commit> = like "squash" but keep only the previous

autosquashを実行後にエディタが立ち上がり、上記のような画面になります。
まとめたいコミットの下にfixupが付与されたコミットが来ていれば想定通りです。

あとはエディタを閉じれば、コミットがまとめられます。

❯ git log --oneline
1131338365 (HEAD -> edit_article_page) Fix settings page
9c5a2d3e7a Fix article page
ab6a6bef9d Add column
cgbaeef9d3 (origin/master, master) Initial commit

終わりに

今回はgit commit --fixupの使い方を簡単に紹介しました。
一見すると登場するコマンドがやや難解そうですが、使ってみると簡単かつ便利です。
知らなかったというみなさんもぜひ使ってみてください。

(私は今の現場に来る前は、修正コミットなども残していたので、fixupを知ったのは、本当につい最近です)

349
229
1

新規登録して、もっと便利にQiitaを使ってみよう

  1. あなたにマッチした記事をお届けします
  2. 便利な情報をあとで効率的に読み返せます
  3. ダークテーマを利用できます
ログインすると使える機能について
inukai-masanori

@inukai-masanori(M Inukai)

2022年4月 ~ 約4年ぶりにエンジニア復帰しました。ブランクを取り戻せるように一生懸命頑張ってます!今までの経歴: ミュージシャン → エンジニア → マーケター → エンジニア (今)
qiita-inc
「エンジニアを最高に幸せにする」ために Qiita、Qiita Team、Qiita Jobs を開発・運営しています。
この記事は以下の記事からリンクされています

コメント

ktgw0316
@ktgw0316

git rebase -i --autosquash 9c57cb3e7a~
という風にチルダを使うと、9c57cb3e7aの直前のコミットハッシュをgit logで調べる必要がなくなって便利ですよ。

10

いいね以上の気持ちはコメントで

記事投稿キャンペーン開催中

音声認識APIを使ってみよう!

~
詳細を見る

Qiita×Findy記事投稿キャンペーン 「今の開発組織でトライしたこと・トライしていること・トライしようとしていること」

~
詳細を見る
349
229

ログインして続ける

ソーシャルアカウントでログイン・新規登録

メールアドレスでログイン・新規登録