👍

個人的よく使う便利Gitコマンド

に公開

はじめに

最近ではエディター上でGit操作をする人も多そうだけど自分はいまだにコマンドをぽちぽちしていて、たまにド忘れしてしまうのでよく使う便利だなーと思うコマンドをまとめてみた。
以下、Claudeにコマンドを羅列してこれの解説よろ!って頼んだのを少し手直ししたもの。


Git を使っている開発者なら基本コマンドは押さえているけど、より効率的に作業するための便利なオプションを知らないことも多いですよね。今回は少し踏み込んだ Git コマンドの使い方を紹介します!

git add -p (--patch)

ファイルの変更を部分的にステージングしたいと思ったことはありませんか?git add -p はまさにそのためのコマンドです。

git add -p

このコマンドを実行すると、変更された「ハンク」(コードの塊)ごとにステージングするかどうかを対話的に選択できます。

各ハンクに対して表示されるプロンプトでは以下のオプションが選べます:

  • y - このハンクをステージング
  • n - このハンクをスキップ
  • s - ハンクをさらに小さく分割
  • e - 手動でハンクを編集
  • q - 終了
  • ? - ヘルプを表示

これを使えば、1つのファイルの中で関係のない複数の変更を別々のコミットに分けられます。コードレビューがしやすくなりますよ!

git log -p (--patch)

コミットの履歴を見るだけでなく、各コミットで具体的に何が変更されたかを確認したいときに便利です。

git log -p

このコマンドを実行すると、通常の git log の出力に加えて、各コミットの diff が表示されます。コードの変更内容を詳細に追跡したいときに最適です。

長い出力になりがちなので、以下のようにコミット数を制限するのも良いでしょう:

git log -p -2  # 最新の2つのコミットのみ表示

git log --name-status

各コミットで変更されたファイルとその変更タイプ(追加、修正、削除など)を確認したいときに使います。

git log --name-status

出力では各ファイルの前に変更タイプを示す文字が表示されます:

  • A - 追加されたファイル
  • M - 修正されたファイル
  • D - 削除されたファイル
  • R - 名前が変更されたファイル
  • C - コピーされたファイル

特定のファイルの変更履歴を追いかけるときに便利です。

git diff --staged

コミットする前に、ステージングされている変更を確認するのは良い習慣です。

git diff --staged

これは git commit を実行する前に、実際に何がコミットされるのかをチェックできます。

ちなみに git diff (オプションなし) はステージングされていない変更を表示するので、両方を使い分けると作業状態の把握がしやすくなります。

git commit --amend

直前のコミットを修正したいときに使うコマンドです。

git commit --amend

このコマンドは以下のような場面で便利です:

  • コミットメッセージを修正したい
  • 前回のコミットに変更を追加したい
  • 前回のコミットから変更を削除したい

例えば、コミットした後に小さなバグを見つけた場合、修正してステージングした後に:

git commit --amend

を実行すると、前のコミットに修正を追加できます。

コミットメッセージを変更せずに変更だけを追加したい場合は:

git commit --amend --no-edit

を使うと便利です。

git rebase -i (--interactive)

過去のコミット履歴を整理したいときに使う強力なコマンドです。

git rebase -i HEAD~3  # 直近3つのコミットを対象にする

このコマンドを実行すると、選択した範囲のコミットリストがエディタで開き、以下のような操作が可能になります。
使用頻度が高いものを紹介します。

pick (p)

pick <コミットハッシュ> <コミットメッセージ>

指定したコミットをそのまま使用します。デフォルトの動作です。

reword (r)

reword <コミットハッシュ> <コミットメッセージ>

コミットは使用しますが、コミットメッセージを変更します。エディタが再度開いて新しいメッセージを入力できます。

edit (e)

edit <コミットハッシュ> <コミットメッセージ>

コミットを使用しますが、rebaseの途中で一時停止します。この時点でコミットの内容を変更したり、追加のコミットを作成したりできます。変更が完了したら git rebase --continue で続行します。

squash (s)

squash <コミットハッシュ> <コミットメッセージ>

このコミットを前のコミットに統合します。エディタが開いて2つのコミットメッセージを編集できます。

fixup (f)

fixup <コミットハッシュ> <コミットメッセージ>

squash と同様にコミットを前のコミットに統合しますが、このコミットのメッセージは破棄されます。小さな修正をメインのコミットに含めたいときに便利です。

drop (d)

drop <コミットハッシュ> <コミットメッセージ>

このコミットを完全に削除します。または、行そのものを削除しても同じ効果があります。

使用例

例えば以下のようなrebaseリストがあるとします:

pick abc1234 機能Aの実装
pick def5678 タイポを修正
pick ghi9012 機能Bの実装
pick jkl3456 テストを追加

これを以下のように変更すると:

pick abc1234 機能Aの実装
fixup def5678 タイポを修正
pick ghi9012 機能Bの実装
reword jkl3456 テストを追加

結果として:

  1. 「タイポを修正」コミットは「機能Aの実装」に統合される(メッセージは残らない)
  2. 「機能Bの実装」はそのまま残る
  3. 「テストを追加」のコミットメッセージを変更するためのエディタが開く

このようにrebaseを使うと、コミット履歴をクリーンに整理できます。

まとめ

これらのコマンドを使いこなせるようになると、Git での作業効率がグッと上がります。少し練習が必要かもしれませんが、覚えておいて損はないはずです!

(情報は2024年10月時点のものです。Git のバージョンによって一部の動作が異なる可能性があります。)[1]


Claudeによる解説ここまで

自分で書くよりもちろん断然早いし使用例も出してくれるの偉い。
こうやって見ると、すごいコミットをきれいにしたがってる人みたいになったけどコミットがきれいで損することはないのでみんなもこのコマンドたちを駆使して美しいコミットログを作ろう。

脚注
  1. めっちゃ古いときの情報が出てくることがあるのでいつの時点の情報であるかを出すように設定をしている。たまに嘘つかれる。 ↩︎

Discussion