概要
Gitの状態管理の考え方と、よく使う基本コマンドを整理する。
Gitでは、ワーキングツリー、インデックス、ローカルリポジトリ、リモートリポジトリのどこに変更があるかを理解することが重要になる。
コマンドを丸暗記するより、変更がどこからどこへ移動するかを追うと操作ミスを減らせる。
この記事の構成
- 対象環境と利用上の注意
本文記載時の環境と現在そのまま利用できない箇所を確認。 - 作業時の注意点
設定変更やコマンド実行前に確認しておきたい注意点を整理。 - 状態管理の概念
ワーキングツリー、インデックス、ローカル・リモートリポジトリの関係を整理。 - [git status] : ステータス確認
git statusコマンドの役割と基本操作を具体例から確認。 - [git add] : インデックスへ反映
git addコマンドの役割と基本操作を具体例から確認。 - [git commit] : ローカルリポジトリへ反映
git commitコマンドの役割と基本操作を具体例から確認。 - [git diff] : 差分確認
git diffコマンドの役割と基本操作を具体例から確認。 - [git reset] : コミットの取り消し
git resetコマンドの役割と基本操作を具体例から確認。 - [git push] : リモートリポジトリへ反映
git pushコマンドの役割と基本操作を具体例から確認。 - [git pull] : リモートリポジトリの変更を取込む
git pullコマンドの役割と基本操作を具体例から確認。 - [git checkout] : チェックアウト
git checkoutコマンドの役割と基本操作を具体例から確認。
対象環境と利用上の注意
- 本文記載時の環境
Gitの基本コマンドを扱う記事で、旧来のmaster表記と現在のgit switch・git restoreを含む例を掲載。 - 確認時期
2026年8月にGitの公式資料と照合。
特定のリモートリポジトリに対する一連の操作は再実行していない。 - 現在そのまま利用できない箇所
既定ブランチ名、リモート名、コミットID、コマンド出力は環境ごとに異なる。
例の値をそのまま入力せず、対象リポジトリの状態を確認して置き換える。
作業時の注意点
- addとcommit
addはコミット候補へ載せる操作、commitは履歴として保存する操作。 - diffの対象
ワーキングツリー、インデックス、HEADのどこと比較するかで結果が変わる。 - reset --hard
追跡済みファイルの未コミット変更も失われるため、実行前にstatusとdiffを確認。 - pushとpull
pushは送る、pullは取り込む操作として方向を意識する。
以下のコマンド例にある[FILE]、[FILE1]、[DIR]などは、実際のファイルパスやディレクトリパスへ置き換えるための表記である。角括弧を含めて入力すると、シェルではglobパターンとして解釈されるため、そのままコピーしない。
状態管理の概念
-
ワーキングツリー(working tree)
現在チェックアウトしているローカルディレクトリを指す。
実際に修正、追加、削除を行う作業場所のこと。 -
インデックス / ステージ(index / staging area)
次のcommitに含める内容を準備する領域。
git addでワーキングツリーの変更内容をインデックスへ記録し、コミット対象を選択。 -
ローカルリポジトリ(local repository)
ローカルマシン上にある個別リポジトリ。
commitされたすべての履歴やバージョンが保存される場所。
branch単位のpushによってcommitをリモートリポジトリ(remote repository)に反映。 -
リモートリポジトリ(remote repository)
ネットワーク上にある共有リポジトリ。
通常は、GitHubやGitLabなどのホスティングサービス上に存在する。
[git status] : ステータス確認
-
確認用に
touchでファイルを新規作成$ touch example-src.txt -
git statusでステータス確認
Untracked filesには、まだGitの追跡対象になっていないファイルが表示される。
上記で新規作成したexample-src.txtがバージョン管理下にないためgit addを促す警告が表示されている。
$ git status On branch master No commits yet Untracked files: (use "git add ..." to include in what will be committed) example-src.txt nothing added to commit but untracked files present (use "git add" to track) -
git statusのその他使用例$ git status [FILE] # ファイルパス指定 $ git status [DIR] # ディレクトリ指定
[git add] : インデックスへ反映
-
前項の警告に従い
git addを実行
git addにより、変更がワーキングツリーからインデックスへ反映される。
$ git add example-src.txt -
ステータス確認
$ git status On branch master No commits yet Changes to be committed: (use "git rm --cached ..." to unstage) new file: example-src.txt -
git addのその他使用例$ git add [FILE] # ファイルを指定して追加する $ git add [FILE1] [FILE2] [FILE3] # 複数ファイルを指定して追加する $ git add [DIR] # ディレクトリを指定して追加する $ git add [DIR1] [DIR2] [DIR3] # 複数ディレクトリを指定して追加する $ git add . # カレントディレクトリ以下の追加・変更・削除を追加する $ git add -A # リポジトリ全体の追加・変更・削除を追加する(--all と同じ) $ git add --all # リポジトリ全体の追加・変更・削除を追加する(-A と同じ) $ git add -u # 追跡済みファイルの変更と削除を追加する(--update と同じ) $ git add --update # 追跡済みファイルの変更と削除を追加する(-u と同じ) $ git add -f [FILE] # .gitignore対象のファイルを強制的に追加する(--force と同じ) $ git add --force [FILE] # .gitignore対象のファイルを強制的に追加する(-f と同じ) $ git add -p # 差分を対話形式で確認しながら追加する(--patch と同じ) $ git add --patch # 差分を対話形式で確認しながら追加する(-p と同じ) $ git add -n # 実際には追加せず、追加対象を確認する(--dry-run と同じ) $ git add --dry-run # 実際には追加せず、追加対象を確認する(-n と同じ)git add -f(--force)は.gitignoreの対象も追加。秘密鍵、認証情報、環境変数ファイルなどを誤って登録しないよう、実行前後にgit statusとgit diff --cachedで対象を確認。
[git commit] : ローカルリポジトリへ反映
-
上記の変更をメッセージ付きでコミット
git commitにより、変更がインデックスからローカルリポジトリへ反映される。
$ git commit -m 'Add example-src.txt' [master (root-commit) 304a1cd] Add example-src.txt 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 example-src.txt -
git commitのその他使用例$ git commit -m "コミットメッセージ" # コミットメッセージを指定 $ git commit --amend # 直前のコミットを作り直す--amendはコミットIDが変わるため、共有済みのコミットに対しては影響を確認してから使う。
[git diff] : 差分確認
-
コミット後の編集
ファイルを編集後、再度ステータス確認を行うと下記の通り、コミット後に編集があったことを示すmodified: example-src.txtが表示されるようになる。$ echo "test input" > example-src.txt $ git status On branch master Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: example-src.txt no changes added to commit (use "git add" and/or "git commit -a") -
git diffで差分確認
差分結果としてtest inputが追記されていることが分かる。$ git diff diff --git a/example-src.txt b/example-src.txt index e69de29..c2cbb36 100644 --- a/example-src.txt +++ b/example-src.txt @@ -0,0 +1 @@ +test input -
git diffのその他使用例$ git diff HEAD # 最新コミットとの差分確認 $ git diff --cached # HEADとインデックスの差分確認 $ git diff --name-only # 差分が発生しているファイル名の一覧を表示する $ git diff HEAD^ HEAD # 2件以上コミットがある場合に、直前のコミット内容を確認 $ git show HEAD # HEADのコミット内容を確認
[git reset] : コミットの取り消し
以下のHEAD~1は一つ前のコミットを表すため、2件以上コミットがある状態で使用する。
最初のコミットしかないリポジトリでは参照先が存在しない。
-
ブランチの位置(HEAD)を1つ前へ戻し、インデックスとワーキングツリーはそのまま
取り消したコミットの変更は、ステージ済みの状態で残る。git reset --soft HEAD~1 -
ブランチの位置(HEAD)を1つ前へ戻し、インデックスも戻す
変更内容はワーキングツリーに残るが、ステージからは外れる。--mixedはモードを省略した場合の既定値となる。git reset --mixed HEAD~1 -
HEAD、インデックス、ワーキングツリーを1つ前のコミットへそろえる
追跡済みファイルの未コミット変更も上書きされる。必要な変更が残っていないか、実行前にgit statusとgit diffで必ず確認。git reset --hard HEAD~1
公開済みのコミットを取り消す場合、resetで共有履歴を書き換えるのではなく、打ち消し用コミットを作るgit revertが適する場合がある。
[git push] : リモートリポジトリへ反映
-
新規ブランチをリモートリポジトリに反映し、追跡を設定
ローカルのfeature/new-featureをリモートリポジトリのoriginに作成し、-u(--set-upstream)オプションの指定によって、ローカルリポジトリとリモートリポジトリが紐付けられるため、次回以降はgit pushのみでpush可能となる。
git push -u origin feature/new-feature -
特定のリモートブランチを指定してリモートリポジトリへ反映
ローカルのdevelopブランチをリモートリポジトリのoriginに反映。git push origin develop -
リモートリポジトリから特定のブランチを削除
不要になったリモートブランチをoriginから削除。
共有先へ反映される操作なので、対象名、マージ済みかどうか、共同作業者が使用中でないかを確認してから実行。git push origin --delete branch_name
[git pull] : リモートリポジトリの変更を取込む
- リモートリポジトリの変更をローカルリポジトリに取り込む(リモートとブランチを明示的に指定)
git pullはgit fetch後に、設定やオプションに応じてmergeまたはrebaseで現在のブランチへ変更を統合。
統合前に内容を確認したい場合は、先にgit fetchを実行して差分を確認。git pull origin main
[git checkout] : チェックアウト
-
ブランチの切り替え
developブランチに切り替える。git checkout develop -
新規ブランチ作成と切り替え
新規ブランチを作成し、同時にそのブランチに切り替える。git checkout -b feature/develop-1 -
特定のコミットをチェックアウト
コミットハッシュを指定し、ワーキングツリーを特定のコミットに変更。この操作では特定ブランチを指さないdetached HEAD状態になるため、そのままコミットを重ねる場合は新しいブランチを作成。
git checkout a1b2c3d -
役割別の新しいコマンド
近年のGitでは、ブランチの切り替えにはgit switch、ファイルの復元やステージ解除にはgit restoreを使うと意図を区別しやすい。git switch develop git switch -c feature/develop-1 git restore example-src.txt git restore --staged example-src.txtgit restore example-src.txtは、ワーキングツリーにある未ステージの変更を破棄する。復元前にgit diff -- example-src.txtで内容を確認し、必要な変更はコミットまたは退避しておく。
まとめ
- Gitの基本は、変更がワーキングツリー、インデックス、リポジトリのどこにあるかを理解すること。
- status、diffで確認し、add、commitで履歴に残す流れを押さえる。
- resetやpush/pullは影響範囲が大きいため、操作前にブランチと状態を確認。