コマンド比較

混同しやすいコマンドの違いを解説します。

checkout vs switch vs restore

checkoutは多機能すぎて混乱を招くため、Git 2.23でswitchとrestoreに分離された。用途別に使い分けるのが現代的。

項目 checkout switch restore
用途 ブランチ切り替え&ファイル復元(旧来) ブランチ切り替え専用 ファイル復元専用
git checkout <branch> git switch <branch> git restore <file>
メリット 1コマンドで複数操作 意図が明確、安全 意図が明確
デメリット 意図が不明確になりやすい ファイル復元はできない ブランチ操作はできない

推奨

switch/restoreを使い分けるのが推奨。checkoutは後方互換性のために残されている。

reset vs revert

どちらも「取り消し」だが、履歴の扱いが根本的に異なる。チーム開発ではrevertが安全。

項目 reset revert
用途 履歴を巻き戻す(履歴改変) 打ち消しコミットを作成(履歴保持)
git reset HEAD~1 git revert <commit>
メリット 履歴がきれいになる push済みでも安全
デメリット push済みだと問題発生 履歴が増える

推奨

ローカルのみの変更はreset、push済みはrevertを使用。チーム開発では基本revert。

merge vs rebase

ブランチ統合の2つの方法。履歴の見た目と安全性のトレードオフ。

項目 merge rebase
用途 マージコミットを作成して統合 コミットを移動して直線的な履歴に
git merge <branch> git rebase <branch>
メリット 安全、履歴が正確 履歴がきれい
デメリット 履歴が複雑になる 履歴改変、push済みは危険

推奨

個人ブランチの整理にrebase、共有ブランチへの統合はmerge。「push済みをrebaseしない」が鉄則。

fetch vs pull

リモートからの取得方法。pullはfetch+mergeの省略形。

項目 fetch pull
用途 リモートの情報を取得のみ 取得と同時にマージ
git fetch origin git pull origin main
メリット ローカルに影響なし、安全 1コマンドで完結
デメリット 別途mergeが必要 意図せぬマージが発生

推奨

状況確認にはfetch、問題なければpull。不安な場合はfetch→確認→mergeの手順が安全。

branch -d vs -D

ブランチ削除の安全版と強制版。-Dは未マージでも削除される。

項目 -d -D
用途 安全な削除(マージ済みのみ) 強制削除
git branch -d <branch> git branch -D <branch>
メリット 未マージなら警告 確実に削除できる
デメリット マージしていないと削除できない 未マージの作業が消える

推奨

基本は-dを使用。-Dは本当に不要なブランチにのみ。

reset --soft vs --mixed vs --hard

resetの3つのモード。影響範囲が異なる。

項目 --soft --mixed --hard
用途 コミットのみ取り消し コミット+ステージング取り消し(デフォルト) 全て取り消し
git reset --soft HEAD~1 git reset HEAD~1 git reset --hard HEAD~1
メリット 変更もステージングも残る 変更は残る、やり直しやすい 完全にクリーンになる
デメリット 限定的な用途 再度addが必要 変更が消える、復旧困難

推奨

通常は--mixed(デフォルト)。--hardは最終手段として慎重に。