コマンド比較
混同しやすいコマンドの違いを解説します。
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は最終手段として慎重に。