AI活用時の個人的Gitでよく使う機能
Git の便利機能まとめ
僕も他の人が自分の知らない Git の機能でどんなのをどういう場面で使ってるのか気になるので、共有して欲しいためにまずは自分が書いてみるの精神。
stash
その名の通り一時退避
使い方
git stash
git stash -u # Gitが管理対象としていないファイルに対しても退避対象に含める
ユースケース
これまで: 割り込み作業とかが入ってきた時に使っていた
AI導入後: AI にお願いしている部分が重なりすぎてごちゃってきた時に一時退避としてリセットしたいけどコミットを戻すのは勿体無い時使う。
worktree
別のブランチを別ディレクトリで同時に作業できる機能
使い方
git worktree add <path> <branch> # 指定パスに指定ブランチの作業ディレクトリを作成
git worktree list # 現在のworktreeの一覧を表示
git worktree remove <path> # 指定パスのworktreeを削除
ユースケース
これまで: メインの開発ブランチで作業中に、緊急のバグ修正が必要になった場合、別のディレクトリに hotfix ブランチの worktree を作成して、メインの作業を中断せずに同時進行できた。
AI導入後: AI に複数のタスクを並行して実装してもらう時に、タスクごとに別のブランチとworktreeを作成し、各実装の管理をしやすくしている。
Cursorとかで実践していたが、近々Cursorのバックグラウンドマルチスレッド機能により不要になるかもしれない。
bisect
バグの混入したコミットを二分探索で特定する機能
使い方
git bisect start # bisectの開始
git bisect good <commit> # 正常動作するコミットを指定
git bisect bad <commit> # バグがあるコミットを指定
git bisect reset # bisectの終了
ユースケース
これまで: パッケージ更新を自動化していたりで、CIは通るけど実行環境ではデグレってたりすることがたまにある。そういった時に利用することで発生原因を追求しやすかった。
AI導入後: Devinとかを使っていて、小さい変更なら問題なさそうだが、多少大きくなるとどこでデグレが起こってるか知らずにデグレってしまうことがこれまでより多く発生しがちである。もちろんレビューをしているが、それでもデグレは起こるもの。そういった時に、このbisectを使うことで早期に原因となるコミットを見つけることを容易にしてくれる。
log --oneline
コミット履歴を1行ずつコンパクトに表示する機能
使い方
git log --oneline
git log --oneline -n 10 # 最新の10件だけ表示
ユースケース
これまで: プロジェクトの進捗確認や、特定のコミットを探す際に使用していた。
AI導入後: AI に行ったタスクの要約をしてもらう際の差分確認として利用。タスク管理ツールへのMCPによる追加などを行う際に、どのコミットの内容を含んでもらうかをコミットIDで指定することでより正確性が高まる。
git diff main
現在のブランチと main ブランチの差分を表示
使い方
git diff main # 現在のブランチとmainブランチの差分を表示
git diff main --name-only # 変更があるファイル名のみを表示
git diff main -- path/to/file # 特定のファイルだけの差分を表示
ユースケース
これまで: PR を作成する前に、main ブランチからどのような変更を加えたかを確認する際に使用。
AI導入後: これもlogの--onelineと同じような使い方になるが、プロジェクト管理ツールなどに詳細を記載する際に、これでやったことをまとめてもらうために差分を見て判断してもらうなどをするのに利用。あとは、大袈裟だがコミットメッセージを考えてもらう時にも使える(すでにAgentにそういう機能が組み込まれてるケースが多いが)
gitignore とその応用
Git の管理対象から除外するファイルを指定する機能
プロジェクト固有の .gitignore
これでもignoreできるが、コミットに含まれる可能性が出てしまう。
自分用のメモやプロンプト管理をしているのにコミットするのは御法度だ。
# プロジェクトルートの .gitignore ファイル
node_modules/
.env
dist/
*.log
グローバル gitignore の設定
プロジェクトの.gitignoreでは共有されてしまうため、個人的なファイルはグローバル設定で除外すると良い。
コミットに含めないようにある規則に従って自分用のメモルールを決めておくと良い。
*-memo.md
とかにするなど。
# デフォルトの場所を使用する場合
mkdir -p ~/.config/git
touch ~/.config/git/ignore
# ~/.config/git/ignore の内容例
# IDE/エディタ固有のファイル
.vscode/
.idea/
*-memo.md
prompt-*.md
ローカルのみの除外 (.git/info/exclude)
全プロジェクトで適用するのではなく、個別プロジェクトで指定したい場合もある。
その場合は、.git
の中で指定することでプロジェクト個別で無視する規則を作れる。
# .git/info/exclude に追加(リポジトリ内にコミットされない)
# 個人的なテスト用ファイル
my-test-folder/
personal-notes.md
temp-*.js
ユースケース
これまで: 新規参入したプロジェクトのコードリーディングなどで個別のパッケージなどでメモを残しておきたい時などにメモ帳ではなく、そのままプロジェクト内に残せる。
AI導入後: AIに読ませて、コード理解を加速するためのプロンプトの配置や、AI用のセッションとしても使える(いわゆるメモリーバンク的な使い方)。もちろん、自分のメモとしても残せるのも利点の一つ。メモしたものがいろんなメモツールに分散してしまわないことを防げる。
Discussion