はじめに
Gitを使いこなすと、開発の効率が格段に向上します。リポジトリが大きくなるにつれて操作が遅くなったり、ブランチ切り替えで変更を上書きしてしまったり、巨大なモノレポで苦労したり...そんな経験はありませんか?
Gitは進化を続けており、便利な機能が追加されています。今回紹介する10のコマンドは、知っているだけでワークフローがスムーズになる「隠れた便利機能」です。さっそく見ていきましょう!
1. git switch
— ブランチ切り替えを安全に
〈従来の問題〉
以前は git checkout
でブランチを切り替えていましたが、このコマンドは「ファイルの復元」「ブランチ作成」「特定コミットのチェックアウト」など多機能すぎて混乱の元でした。
〈解決策〉
Git 2.23で導入された git switch
は、ブランチ操作に特化したコマンドです。
# ブランチの切り替え
git switch feature-branch
# 新規ブランチを作成して切り替え
git switch -c new-branch
これで、誤ってファイルを上書きする心配がなくなります!
2. git restore
— 変更を安全に元に戻す
〈従来の問題〉
変更の取り消しには git checkout
や git reset
を使っていましたが、これらのコマンドはブランチの状態を意図せず変更するリスクがありました。
〈解決策〉
git restore
は ファイルの変更のみ を対象とします。
# 作業ディレクトリの変更を破棄
git restore main.js
# ステージングされた変更を解除
git restore --staged main.js
ブランチの状態を気にせず、安全に変更を元に戻せます。
3. git maintenance
— リポジトリのメンテナンス自動化
〈従来の問題〉
リポジトリが大きくなると git gc
や git repack
を手動で実行する必要がありました。
〈解決策〉
Git 2.29で導入された git maintenance
で自動化可能に:
# 自動メンテナンスを有効化
git maintenance start
# 即時実行
git maintenance run
内部で実行される処理:
- 不要オブジェクトの削除(
git gc
) - パックファイルの最適化(
git repack
) - コミットグラフの更新(
git log
の高速化)
4. git sparse-checkout
— 巨大リポジトリを効率的に扱う
モノレポで特定のディレクトリのみ必要な場合、全体をクローンするのは非効率です。
# スパースチェックアウトを有効化
git sparse-checkout init
# 必要なディレクトリのみ指定
git sparse-checkout set services/ docs/
これでディスクスペースと時間を節約できます!
5. git log --remerge-diff
— マージの変更を詳細に確認
マージコミットでどの変更が加わったのかを明確に表示:
git log --remerge-diff
コンフリクト解決後の変更をデバッグする際に便利です。
6. git blame --ignore-rev
— フォーマット変更を無視
一括フォーマット変更で git blame
が使いづらくなったとき:
# 特定コミットを無視
git blame --ignore-rev commit-hash
# 永続的に無視リストに追加
echo "commit-hash" >> .git-blame-ignore-revs
git config blame.ignoreRevsFile .git-blame-ignore-revs
7. git range-diff
— コミット範囲の差分を比較
リベース前後のコミットを比較:
git range-diff old-branch new-branch
機能追加やバグ修正の履歴を追うのに最適です。
8. git worktree
— 複数ブランチを同時に作業
別ディレクトリでブランチを並行作業:
# 追加作業ディレクトリを作成
git worktree add ../feature-branch feature-branch
# 削除
git worktree remove ../feature-branch
ブランチ切り替えのストレスから解放されます!
9. git rebase --update-refs
— ブランチ参照を自動更新
リベース時に関連ブランチも自動で更新:
git rebase --update-refs
手動でのポインタ修正が不要に。
10. git commit --fixup + git rebase --autosquash
— コミット履歴をきれいに
過去のコミットに修正を加える場合:
# 修正用コミットを作成
git commit --fixup=<target-commit>
# 自動で統合
git rebase -i --autosquash main
手動で編集する必要がなくなります。
まとめ
今回紹介したコマンドは、日常的なGit操作の悩みを解決してくれます。
今日から1つでも試してみてください!
次の記事まで、ハッピーコーディング! 🚀