Gitのadd・commit・pushを理解する|変更をGitHubへ反映する基本フロー

「Gitのadd・commit・pushを理解する|変更をGitHubへ反映する基本フロー」の内容を表す技術イラスト

Gitを使い始めると、ほぼ必ず登場するのが次の3つのコマンドです。

git add
git commit
git push

一見すると、

「変更したファイルをGitHubへ送るためのコマンド」

に見えます。

しかし、3つはそれぞれまったく違う役割を持っています。

ファイルを変更
    ↓
git add
    ↓
git commit
    ↓
git push
    ↓
GitHub

この流れを理解すると、Gitの操作が単なるコマンド暗記ではなくなります。

この記事では、ファイルを編集してからGitHubへ反映されるまでを一つずつ確認します。


目次

まず全体像を理解する

Gitでは、変更したファイルがいきなりGitHubへ送られるわけではありません。

大きく分けると、次の4つの場所があります。

作業フォルダ
    ↓
ステージング領域
    ↓
ローカルリポジトリ
    ↓
リモートリポジトリ

GitHubを使う場合、リモートリポジトリはGitHub上にあります。

それぞれの役割を整理すると次のようになります。

場所役割
作業フォルダ実際にファイルを編集する
ステージング領域次の記録に含める変更を選ぶ
ローカルリポジトリPC内に変更履歴を記録する
リモートリポジトリGitHubなどへ履歴を送る

そして、各場所をつなぐのが、

git add
git commit
git push

です。


ファイルを編集しただけではGitに記録されない

まず通常どおりファイルを編集します。

たとえば、

test.py

というPythonファイルに、

print("Hello Git")

と書いて保存したとします。

この時点では、ファイルそのものは変更されています。

しかし、まだGitの履歴には記録されていません。

現在の状態は、

作業フォルダ
    ↓
変更あり

Git履歴
    ↓
まだ変更なし

です。

Gitでは、この「ファイルは変更したが、まだ記録していない」という状態を扱えます。


git statusで現在の状態を見る

Git操作をするときに非常に重要なのが、

git status

です。

実行すると、現在のリポジトリの状態を確認できます。

たとえば、

Changes not staged for commit:
  modified: test.py

と表示された場合、

test.pyは変更されている
↓
まだcommit対象には選ばれていない

という意味です。

Gitで迷ったときは、まず、

git status

を見る習慣をつけると現在位置を把握しやすくなります。


git addとは何か

変更したファイルを次のコミットに含めたい場合、

git add

を使います。

たとえば、

git add test.py

と実行します。

これは、

「test.pyをGitHubへ送る」

という意味ではありません。

正確には、

test.pyの現在の変更を、次のコミットに含める対象として登録する

操作です。

流れで見ると、

作業フォルダ

test.py
  ↓
git add
  ↓
ステージング領域

となります。


ステージング領域とは何か

Gitには「ステージング領域」という少し独特な仕組みがあります。

これは、

次のコミットに何を含めるかを一時的に選ぶ場所

です。

たとえば3つのファイルを変更したとします。

main.py
README.md
config.json

このうち、

main.py
README.md

だけを今回のコミットに含めたい場合、

git add main.py
git add README.md

とします。

すると、

今回のcommit
├─ main.py
└─ README.md

まだcommitしない
└─ config.json

という分け方ができます。

これがステージング領域の大きな役割です。


git add . は便利だが意味を理解して使う

よく使われるコマンドに、

git add .

があります。

.は現在のディレクトリを表します。

そのため、

git add .

は、現在のフォルダ以下の変更をまとめてステージングする操作です。

非常に便利ですが、

必要な変更
+
関係ない変更
+
意図しないファイル

まで含めてしまう可能性があります。

そのため、

git status

で状態を確認してから実行する習慣が重要です。


addした状態を確認する

git addしたあと、もう一度、

git status

を実行します。

今度は、

Changes to be committed:
  modified: test.py

のように表示されます。

これは、

test.py
↓
次のcommitに含まれる予定

という状態です。

ここでまだ履歴そのものは作成されていません。


git commitとは何か

ステージングした変更を履歴として記録するのが、

git commit

です。

一般的には、メッセージを付けて実行します。

git commit -m "Add greeting message"

これによって、

ステージング領域
    ↓
git commit
    ↓
ローカルリポジトリ

へ変更が記録されます。

ここで重要なのは、

commitはGitHubへの送信ではない

という点です。

commitした時点では、変更履歴は自分のPC内にあります。


commitは「保存」より「履歴の記録」に近い

ファイルの保存とcommitは別物です。

通常の保存は、

Ctrl + S

などでファイルの内容をディスクへ保存します。

一方、commitは、

その時点の変更をGitの履歴として記録する

操作です。

たとえば、

commit A
初期ファイルを作成

commit B
入力処理を追加

commit C
入力チェックを追加

というように、プロジェクトの変更履歴が積み重なっていきます。

Gitでは、この履歴を後から確認できます。


commitメッセージは変更内容が分かるようにする

commitには通常、メッセージを付けます。

たとえば、

git commit -m "Update file"

でも動作します。

しかし後から見たとき、

何を変更したのか

が分かりにくくなります。

できるだけ、

git commit -m "Add input validation"
git commit -m "Fix cylinder calculation"
git commit -m "Update README installation steps"

のように、変更内容を表すメッセージにすると履歴を利用しやすくなります。


commitしただけではGitHubは変わらない

ここは特に混同しやすい部分です。

git commit

を実行しても、GitHub上のリポジトリはまだ更新されません。

状態としては、

PC

ローカルリポジトリ
commit済み
    ↓

GitHub
まだ古い状態

です。

ローカルに作成したコミットをGitHubへ送る操作が、

git push

です。


git pushとは何か

ローカルリポジトリのコミットをリモートリポジトリへ送るのが、

git push

です。

流れとしては、

ローカルリポジトリ
    ↓
git push
    ↓
GitHub

となります。

通常、一度リモートとの追跡関係が設定されていれば、

git push

だけで送信できます。


初回pushでは -u を使うことがある

新しいローカルブランチを初めてGitHubへ送るときは、

git push -u origin main

のように実行することがあります。

それぞれの意味は、

origin
= リモートリポジトリの名前

main
= 送信するローカルブランチ

です。

-uを指定すると、

ローカル main
        ↓
origin/main

という追跡関係が設定されます。

一度設定されれば、その後は、

git push

だけで済むことが多くなります。


add・commit・pushの違い

ここまでを整理すると、3つのコマンドの役割は明確です。

コマンド役割
git add次のコミットに含める変更を選ぶ
git commit選んだ変更をローカル履歴として記録する
git pushローカルのコミットをGitHubへ送る

一行で表すと、

変更
↓
選ぶ
↓
記録する
↓
送る

です。

コマンドに対応させると、

変更
↓
git add
↓
git commit
↓
git push

になります。


実際の基本フロー

ファイルを編集したあと、最も基本的な流れは次のようになります。

まず状態を確認します。

git status

変更内容を確認します。

git diff

コミットしたいファイルをステージングします。

git add test.py

再び状態を確認します。

git status

履歴として記録します。

git commit -m "Add greeting message"

GitHubへ送ります。

git push

これで、

編集
↓
確認
↓
add
↓
commit
↓
push
↓
GitHub

という一連の流れが完了します。


git diffも一緒に使う

git statusは、

どのファイルが変更されたか

を確認するのに向いています。

一方、

git diff

を使うと、

ファイルの中身が具体的にどう変わったか

を確認できます。

たとえば、

-print("Hello")
+print("Hello Git")

のように差分が表示されます。

そのため、実際の作業では、

git status
git diff

をセットで使うと変更内容を確認しやすくなります。


pushできたかGitHubで確認する

git pushが成功したら、GitHubの対象リポジトリを開きます。

確認するポイントは、

  • 変更したファイルが反映されている
  • 最新のcommitメッセージが表示されている
  • 対象ブランチが正しい

ことです。

GitHub上に最新のコミットが表示されれば、

ローカル
↓
GitHub

まで変更が届いたことを確認できます。


よくある勘違い

addするとGitHubへ送られる

送られません。

git addはステージング領域へ変更を登録するだけです。


commitするとGitHubへ反映される

まだ反映されません。

git commitはローカルリポジトリへ履歴を記録します。

GitHubへ反映するにはgit pushが必要です。


pushすれば未保存の変更まで送られる

送られません。

基本的にpushされるのは、ローカルリポジトリに存在するコミットです。

ファイル変更
↓
未commit

の状態では、その変更はpush対象になりません。


git add . を毎回使えばよい

動作はしますが、不要なファイルまで含める可能性があります。

特に複数ファイルを編集している場合は、

git status

で確認してから実行する方が安全です。


操作に迷ったらgit statusを見る

Gitでは、

今どの状態なのか分からない

ということがよくあります。

そのときは、

git status

を実行します。

たとえば、

変更しただけ

なのか、

add済み

なのか、

commitするものがない

のかを確認できます。

Git操作では、

操作
↓
git status
↓
次の操作

という使い方をすると状態を見失いにくくなります。


実習

Git管理されているテスト用リポジトリで、ファイルを1つ変更します。

例として、

test.txt

を作り、

Git practice

と書いて保存します。

まず状態を確認します。

git status

次にステージングします。

git add test.txt

確認します。

git status

コミットします。

git commit -m "Add test file"

GitHubへ送ります。

git push

最後にGitHubを開き、

test.txt

と、

Add test file

というコミットが反映されているか確認します。


まとめ

Gitで変更をGitHubへ反映するときの基本は、

作業フォルダ
    ↓
git add
    ↓
ステージング領域
    ↓
git commit
    ↓
ローカルリポジトリ
    ↓
git push
    ↓
GitHub

です。

それぞれの意味は、

git add
= 変更を選ぶ

git commit
= 履歴として記録する

git push
= GitHubへ送る

と考えると分かりやすくなります。

この3つの役割を区別できるようになると、Gitの基本操作はかなり理解しやすくなります。

コマンドを丸暗記するより、

変更が今どこにあるのか

を意識しながら操作することが、Gitを理解する近道です。

参考になったらシェアしてください
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

機械設計・油圧・CAD・Python・AIなど、ものづくりに関わる技術を扱っています。工学知識を整理・構造化し、設計や自動化に再利用できる形へ変えていくことを目指しています。

目次