SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

翔泳社の本(AD)

Gitで「コミット」してみよう! 初心者でも確実に基本操作を学べる入門書から解説

 Git初心者がまず知るべき基本操作は、やはり「コミット(特定の変更を保存すること)」です。今回は高橋あおいさんの著書『つくって、壊して、直して学ぶ Git&GitHub 入門』(翔泳社)から、Gitでコミットする方法を解説します。Gitのコマンドに自信がない人でも、読めば「どんなときにどのコマンドを使えばいいのか」がわかります!

 本記事は『つくって、壊して、直して学ぶ Git&GitHub 入門』(著者:高橋あおい)の「Chapter 3 Gitの基本的な使い方と用語を知ろう」から一部を抜粋したものです。掲載にあたって編集しています。

Gitの基本的な使い方と用語を知ろう
Gitの基本的な使い方と用語を知ろう
Gitの基本的な使い方と用語を知ろう

コミットを知ろう

 Gitでは現在作業している場をWorking Tree(ワーキングツリー)/Working Directory(作業ディレクトリ)と呼びます。本書ではわかりやすさのため作業ディレクトリと記載します。

 作業ディレクトリローカルリポジトリの差分をうまく管理するために導入されているのがステージングエリアという仕組みです。ステージングエリアはインデックスとも呼びます。

 そもそもローカルリポジトリって何? データベース? などと疑問に思われるかもしれません。ローカルリポジトリの実体は.gitというディレクトリです。作業ディレクトリは.gitディレクトリが置かれているディレクトリ全体を示しますが、後述するコミットを実行することでさらに.gitディレクトリの中に履歴として変更の情報が保存されます。

 gitコマンドは作業ディレクトリ全体と.gitディレクトリの履歴の差分を出したり、.gitディレクトリの履歴の中から情報を復元したりします。

 「なんか難しそうだけれど、実は.gitディレクトリの中にコミットの履歴やGitの設定情報、ステージングエリアの内容などが全部書かれている!」と思うと少しはイメージが湧いてくるでしょうか。.gitディレクトリの中身は会員特典データ(Gitの中身を見てみよう)で詳しく説明します。

コミットを知ろう

 ローカルリポジトリに特定の変更を保存することをコミットと言います。コミットにはそれぞれ識別番号(ID)がつき、それをコミットIDと呼びます。コミットIDは各コミットを識別するためのものであり、たとえば特定のコミットを消したいときや特定のコミットの変更履歴を参照したいときなどに活用するケースが多くあります。次のスクリーンショットでコミットの履歴の例を見てみましょう。

コミットの履歴の例

 「作業ディレクトリ」の変更履歴を「ローカルリポジトリ(.gitディレクトリ)」に保存するために「コミット」する……これで十分かもしれません。しかし、Gitの大きな工夫の1つとして、コミットを便利にするためにステージングエリアが存在します。ステージングエリアは、コミットする前にどのファイル(行)を保存する予定か表示し、確認するプレビュー機能の役割を果たしています。

ステージングエリアとは

ステージングエリアとは

 ステージングエリアにファイル(行)を追加することをステージすると言います。また、ステージングエリアをインデックスと呼ぶこともあります。本書ではステージングエリアの表記で統一します。

 ステージングエリアを参照することで、「これからコミットする予定のファイル」を確認できます。これが先ほどから書いているプレビュー機能のことです。慣れないうちはステージすることやステージングエリアの存在が難しく感じられるかもしれません。しかしコミットする前にどの変更をコミットする予定かチェックできるのは非常に便利ですし、事故防止の観点でも役立ちます。

なんとなくから一歩前進! Gitの基本的なコマンドを知ろう(git status, add, commit, diff, log, show)

 具体的にコマンドと用語を比較して見てみましょう。

Gitの基本的なコマンドを知ろう

 あらためてそれぞれのコマンドについて説明します。新たにGitリポジトリを作成しましょう。

 cd ..コマンドを実行すると1つ上のディレクトリに移動することができます。また、pwdコマンドを実行するとカレントディレクトリの場所を知ることができます。今後は適宜案内しませんが、新規Gitリポジトリを作成するときには気をつけてください。

mkdir study-3-3
cd study-3-3
git init

実行結果
$ mkdir study-3-3
cd study-3-3
git init
Initialized empty Git repository in /Users/aoi/workspaces/github.
study-3-3/.git/
$

作業ディレクトリ内のファイルをステージングエリアに追加する:git add

 git addというコマンドは、作業ディレクトリ内の現在の内容を使用してステージングエリアを更新し、次のコミットに向けてステージします。

 git addコマンドに限った話ではないですが、ファイル名を指定する際には正確にファイル名を入力しましょう。たとえばhello.txtとHello.txtは区別され、間違えてaddしても何も起きません(存在しないファイルをaddしてもエラーは出ません)。

 次のコマンドでカレントディレクトリ以下をすべてステージできます。ただし、気づかないうちに余計なファイルもaddしていることがあるため、コミット前にaddしたファイルを確認すると良いでしょう。どのファイルをステージしたか確認するには、git statusコマンドを使います。

git add .

 また、次のように特定のファイルのみステージできます。ファイル名はスペースで区切ることで複数ファイルを同時にステージできます。

git add <ファイル名>

 では、あらためてgit addコマンドを使ってみましょう。まずはechoコマンドを使用して新規にファイルを作成します。好きなテキストエディタで名前をつけてファイルを保存するのでも問題ありません。

echo "hello" >> test.txt

実行結果
$ echo "hello" >> test.txt
$

 git addコマンドを使用してtest.txtをステージしてみましょう。

git add test.txt

実行結果
$ git add test.txt
$

 これでtest.txtをステージできました。ただ、これだけでは本当にステージができているか不安ですよね。このような際にGitリポジトリの状況を参照するgit statusコマンドを利用します。

作業ディレクトリのステータスを表示する:git status

 git statusコマンドを実行すると、ステージングエリアにあるファイルと現在のコミットの間に差分があるパス、作業ディレクトリとステージングエリアにあるファイルの間に差分があるパス、およびGitに追跡されていない(かつ.gitignoreファイルによって無視されていない)作業ディレクトリ内のパスを表示します。

 早速git statusコマンドを実行してみましょう。

git status

実行結果
$ git status
On branch main

No commits yet

Changes to be committed:

  (use "git rm --cached ..." to unstage)
        new file: test.txt
$

 先ほどgit addを実行したファイルがChanges to be committed(コミットされる変更)として結果に出てきました。これはtest.txtがステージされていることを意味しています。

 ほかにもgit statusコマンドではGitリポジトリのさまざまな状況を参照できます。ここではもう少し複雑なgit statusコマンドの実行例を見てみましょう。

実行結果
$ git status
On branch develop
Your branch is up to date with 'origin/develop'.

Changes to be committed: 
  (use "git restore --staged <file>..." to unstage)
        modified: test2.txt

Changes not staged for commit: 
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified: test.txt

Untracked files: 
  (use "git add <file>..." to include in what will be committed)
        hello.txt
$

 これらのステータスは次のような状態を示します。

ステージングエリア

 間違えてステージングエリアに含めてしまっているファイルや逆にステージングエリアに含め忘れているファイルの有無にこのコマンドで気づけます。

コミットを実行する:git commit

 リポジトリに変更を記録します。コミットを行うためにコミットメッセージを書くことは必須です。かつてメジャーだったバージョン管理システムSVNではコミットメッセージ不要でリポジトリに変更を記録できたため、これもSVNとの大きな違いです。

 通常はgit commitを実行することでコミットのコメントを入力するテキスト編集画面が開きます。すでにみなさんに手を動かしてもらったように、-mオプションをつけることでコメントをあらかじめ入力しておくこともできます。

git commit -m "コミットコメントです"

 ほかにも筆者がたまに使うコマンドをご紹介します。次のコマンドでは「空のコミット」を許可します。

git commit --allow-empty

 次のコマンドで直前のコミットメッセージを修正できます。このコマンドは便利なので試してみましょう。

git commit --amend

 ここではファイルをステージしたつづきを行います。たとえば、次のようにコミットメッセージを間違えて書いてしまったとしましょう(commitと書きたかったところをcometと書いてしまった)。次のコマンドを実行してください。

git commit -m "This is a comet message"

 つづいて、git commit --amendを実行してコミットメッセージを修正しましょう。コマンドを実行するとテキストエディタが立ち上がるので、次のようにcometをcommitに修正しましょう。

This is a commit message

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Date:      Sun Oct 5 22:25:47 2025 +0900
#
# On branch main
#
# Initial commit
#
# Changes to be committed:
#       new file: test.txt
#

 #ではじまるコミットメッセージは無視されるので、そのままにしておいて問題ありません。修正が完了したら編集内容を保存してテキストエディタを閉じましょう。すると次のような実行結果が得られます。

実行結果
$ git commit --amend
[main 3ddb14c] This is a commit message
 Date: Sun Oct 5 22:25:47 2025 +0900
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt
$

 git logでコミットメッセージを参照できるので、コミットメッセージが修正できていることを確認しましょう。

実行結果
$ git log
commit 3ddb14c89537e65e2c6fc90c910adbd98291af6d (HEAD -> main)
Author: Aoi <aoi@example.com>
Date:   Sun Oct 5 22:25:47 2025 +0900

    This is a commit message
$

コミット間やコミットと作業ディレクトリ間などの差分を表示する:git diff

 git diffはさまざまな差分を表示するコマンドです。よく使うので覚えておきましょう。git diffにオプションをつけずに実行すると、作業ディレクトリとステージングエリアとの差分が表示されます。サンプルファイルを使用してコマンドを試してみましょう。まずはファイルを2つ作成して行を追加します。

echo "This is file1." >> file1.txt
echo "This is file2." >> file2.txt

実行結果
$ echo "This is file1." >> file1.txt
echo "This is file2." >> file2.txt
$

 では、つづいて2つのファイルをgit addしましょう。

git add file1.txt file2.txt

実行結果
$ git add file1.txt file2.txt
$

 次はコミットしましょう。

git commit -m "Add file1 and file2"

実行結果
$ git commit -m "Add file1 and file2"
[main (root-commit) 9cba478] Add file1 and file2
 2 files changed, 2 insertions(+)
 create mode 100644 file1.txt
 create mode 100644 file2.txt
$

 では、次のコマンドでファイルに行を追加しましょう。

echo "New line in file1." >> file1.txt
echo "New line in file2." >> file2.txt

実行結果
$ echo "New line in file1." >> file1.txt
echo "New line in file2." >> file2.txt
$

 ではどのような差分が出ているのか見るために、git diffを実行してみましょう。

git diff

実行結果
$ git diff
diff --git a/file1.txt b/file1.txt
index bfccc4a..8a585ea 100644
--- a/file1.txt
+++ b/file1.txt
@@ -1 +1,2 @@
 This is file1.
+New line in file1. 
diff --git a/file2.txt b/file2.txt
index d2947f4..d64b339 100644
--- a/file2.txt
+++ b/file2.txt
@@ -1 +1,2 @@
 This is file2.
+New line in file2. 
$

 それぞれのファイルで追加した行が差分として出ています。つづいてgit diff -- <ファイル名>を実行してみましょう。このコマンドでは指定したファイル名に関してのみ作業ディレクトリとステージングエリアの差分が出力されます。

git diff -- file1.txt

実行結果
git diff -- file1.txt
diff --git a/file1.txt b/file1.txt
index bfccc4a..8a585ea 100644
--- a/file1.txt
+++ b/file1.txt
@@ -1 +1,2 @@
 This is file1.
+New line in file1.
$

 ではfile1.txtだけgit addしましょう。

git add file1.txt

実行結果
$ git add file1.txt
$

 つづいて、git diff --stagedを実行します。このコマンドはステージングエリアと最新コミットとの差分を表示します。

git diff --staged

実行結果
$ git diff --staged
diff --git a/file1.txt b/file1.txt
index bfccc4a..8a585ea 100644
--- a/file1.txt
+++ b/file1.txt
@@ -1 +1,2 @@
 This is file1.
+New line in file1.
$

 file1.txtをaddしたので、file1.txtだけ差分が出ていますね。コミット間の差分も参照できます。まずはコミットしましょう。

git commit -m "Add new line in file1"

実行結果
$ git commit -m "Add new line in file1"
[main c0eb170] Add new line in file1
 1 file changed, 1 insertion(+)
$

 git logでそれぞれのコミットIDをメモします。

git log

実行結果
$ git log
commit c0eb1705c3ec8520bbd066898d9580c4ffb71a69 (HEAD -> main)
Author: Aoi <aoi@example.com>
Date: Fri Feb 21 08:00:19 2025 +0900

    Add new line in file1
commit 9cba478c6ba35605d32dcbe7d16d5f12346c6de3
Author: Aoi <aoi@example.com>
Date: Thu Feb 20 22:35:37 2025 +0900
    Add file1 and file2
~~~以下略~~~

 git diff <コミットID>で現在の作業ディレクトリとコミットの差分を、git diff <コミットID> <コミットID>で2つのコミットIDの差分を参照できます。まずは現在の作業ディレクトリとコミットの差分を見てみましょう。

git diff <最新コミットのコミットID>

実行結果
$ git diff c0eb1705c3ec8520bbd066898d9580c4ffb71a69
diff --git a/file2.txt b/file2.txt
index d2947f4..d64b339 100644
--- a/file2.txt
+++ b/file2.txt
@@ -1 +1,2 @@
 This is file2.
+New line in file2.
$

 現在の作業ディレクトリはfile1.txtの変更をコミットして、file2.txtに新規行を追加した状態です。そのため、file1.txtの変更コミットとの差分としてfile2.txtの行追加が出力されています。つづいて、2つ前のコミットと最新のコミットの差分を見てみましょう。

git diff <2つ前のコミットID> <最新のコミットID>

実行結果
$ git diff 9cba478c6ba35605d32dcbe7d16d5f12346c6de3 c0eb1705c3ec8520bbd0
66898d9580c4ffb71a69
diff --git a/file1.txt b/file1.txt
index bfccc4a..8a585ea 100644
--- a/file1.txt
+++ b/file1.txt
@@ -1 +1,2 @@
 This is file1.
+New line in file1.
$

 2つ前のコミットと1つ前のコミットにはfile1.txtの行追加が差分として出力されています。

コミットログを参照する:git log

 何度も登場しているgit logは今までのコミットのログ(履歴、以下ログで統一します)が参照できるコマンドです。

 では、git diffのハンズオンで使用したカレントディレクトリを開きましょう。すでに何度も登場していますが、あらためて実行してみましょう。

git log

実行結果
$ git log
commit c0eb1705c3ec8520bbd066898d9580c4ffb71a69 (HEAD -> main)
Author: Aoi <aoi@example.com>
Date: Fri Feb 21 08:00:19 2025 +0900

    Add new line in file1

commit 9cba478c6ba35605d32dcbe7d16d5f12346c6de3
Author: Aoi <aoi@example.com>
Date: Thu Feb 20 22:35:37 2025 +0900

    Add file1 and file2
~~~以下略~~~

 今回はログの表示が短いですが、実際の開発現場ではもっと長いログも見られることでしょう。ログの表示が長くなると、ログをスクロールできるようになります。ログ表示から抜けられずに困ったら、キーボードの「q」を押してください。一番上に表示されているのが最新のコミットで、下に向かうにつれて過去のコミットを参照できます。コミットIDと、誰が、いつ、どんなコミットメッセージでコミットを行ったかを参照できます。

つくって、壊して、直して学ぶ Git&GitHub 入門
 

Amazon  SEshop  その他

 
つくって、壊して、直して学ぶ Git&GitHub 入門
 

著者:高橋あおい
発売日:2025年11月28日(金)
定価:3,300円(本体3,000円+税10%

本書について

本書は、Gitで挫折しがちな「エラー」や「コンフリクト」をあえて引き起こして、その直し方を解説します。 手を動かしながら体験することで今度こそGitがわかる、そんな1冊です。

この記事は参考になりましたか?

翔泳社の本連載記事一覧

もっと読む

この記事の著者

渡部 拓也(ワタナベ タクヤ)

翔泳社所属。翔泳社から刊行した本の紹介記事などを執筆しています。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/22626 2025/12/12 07:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング