restoreとreset、fetchとpullなど、似たGitコマンドの使い分けを目的別に整理しました。Git 2.23以降のswitch/restoreに対応しています。
変更を記録する(add / commit)
addでステージに追加し、commitで記録する2段階の流れです。
git add <ファイル名> # ステージに追加
git add . # 全変更を追加
git commit -m "メッセージ" # コミット
変更差分はgit diff(ステージ前)とgit diff --staged(ステージ後)で確認できます。
変更を取り消す(restore / revert)
Git 2.23以降はrestoreで取り消し操作が統一されています。
git restore <ファイル名> # ワーキングツリーの変更を取り消す
git restore --staged <ファイル名> # ステージを取り消す(変更は残る)
プッシュ済みのコミットを打ち消すにはgit revert <コミットID>を使います。履歴を書き換えないため安全です。
ブランチを操作する(switch / merge)
switchはGit 2.23で導入されたブランチ切り替え専用コマンドです。従来のcheckoutからブランチ操作とファイル復元が分離されました。
git branch <ブランチ名> # 作成
git switch <ブランチ名> # 切り替え
git switch -c <ブランチ名> # 作成して切り替え
git merge <ブランチ名> # 現在のブランチにマージ
リモートと同期する(fetch / pull / push)
fetchは取得のみ、pullは取得+マージ、pushは送信です。
git fetch origin # 取得のみ
git pull origin main # 取得+マージ
git pull --rebase origin main # リベース型(履歴がきれいになる)
git push -u origin <ブランチ名> # 送信(初回は-uで上流設定)
--rebaseをつけるとマージコミットが作られず、履歴がきれいになります。git config --global pull.rebase trueで常時リベース型にできます。
作業を一時退避する(stash)
ブランチ切り替え前に未コミットの変更を退避できます。
git stash # 退避
git stash pop # 復元して退避を削除
git stash apply # 復元(退避は残す)
pullの前にstashで退避する習慣をつけると、コンフリクトの発生を大幅に減らせます。
まとめ
日常の開発はswitch、add、commit、pushのサイクルがほとんどです。途中でstashで退避し、間違えたらrestoreで戻します。このサイクルが回れば一人での開発はほぼカバーできます。
この記事の詳細版は Zenn で公開しています: Gitの実践コマンドを目的別に整理する