Gitマスター育成プログラム(第1ヶ月目:Gitの基本操作と履歴管理)

目的: Gitの基本操作を理解し、ローカルリポジトリでのバージョン管理を習得する。


1. Gitの基本概念と環境構築

1.1 Gitとは何か?

Gitは、ソースコードのバージョン管理を行うための分散型バージョン管理システムです。
主な特徴:

  • 履歴管理: 変更の記録を保持し、過去の状態に戻れる
  • ブランチ管理: 異なる作業を並行して進められる
  • 分散型: ローカルで完結した作業が可能

1.2 Git Bashのインストール

  1. Git公式サイト から Git for Windows をダウンロード
  2. インストール中のオプション選択:
    • デフォルトエディタVim 以外の好きなエディタを選択(サクラエディタ 推奨)
    • PATH設定 → 「Git and optional Unix tools」を選択
    • Git Credential Manager を有効化

1.3「Git Bash Here」とは?

「Git Bash Here」は、WindowsでGit Bashをインストールすると自動的に追加される右クリックメニューのオプションです。
特定のフォルダ内で
右クリック →「Git Bash Here」を選択すると、そのフォルダを起点にGit Bash(ターミナル)が開きます。

通常、Git Bashを起動してからcdコマンドで移動する必要がありますが、「Git Bash Here」を使うと、最初から目的のフォルダで開けるので、作業効率がアップします!


1.4 「Git Bash Here」の使い方

既存のフォルダで開く

  1. Gitをインストールしていることを確認
    • Gitがまだインストールされていない場合は、Git公式サイトからダウンロードしてください。
  2. エクスプローラーを開く
    • Git Bashを開きたいフォルダを開く。
  3. フォルダ内で右クリック
    • メニューの中に「Git Bash Here」が表示される。
  4. 「Git Bash Here」をクリック
    • すると、そのフォルダをカレントディレクトリ(作業ディレクトリ)としてGit Bashが開く!

1.3 Gitの基本設定

Gitをインストールしたら、最初にユーザー情報を設定します。Git Bashで以下のコマンドを入力します。

git config --global user.name "あなたの名前"
git config --global user.email "あなたのメールアドレス"

設定を確認するには以下のコマンドを入力します。

git config --list

以下のような情報が表示されます。

$ git config --list
(中略)

core.editor="C:\Program Files (x86)\sakura\sakura.exe"
(中略)


user.name=yusei
user.email=yuu@saycon.co.jp

(中略)

remote.origin.url=https://github.com/sayconCoJp/workspace.git



2. ローカルリポジトリの操作

2.1 リポジトリの作成

「my_project」というフォルダを作成し、開いてGit Bashで移動します。

Gitリポジトリを初期化

git init

.git フォルダが作成されていることを確認

ファイルの状態を確認

git status

何もしていない場合、以下のメッセージが表示される(例)

.gitフォルダについて

.gitフォルダは、Gitリポジトリの管理情報を格納するディレクトリです。Gitでバージョン管理を行うために不可欠なフォルダであり、通常はリポジトリのルートディレクトリ内に存在します。

このフォルダには、コミット履歴やブランチ情報、設定ファイルなどが含まれています。具体的には、変更履歴を保存するobjects、ブランチ情報を管理するrefs、リポジトリの設定を記述するconfigファイルなどが含まれます。

.gitフォルダを削除すると、リポジトリのバージョン管理情報が失われるため、注意が必要です。また、このフォルダを直接操作することは推奨されず、通常はgitコマンドを使用して管理します。Gitの仕組みを理解するうえで重要な要素となるため、構造を把握しておくとトラブル対応にも役立ちます。

2.2 ファイルの追加と管理

Gitはローカルリポジトリ内の変更を常に監視しています。

「my_project」内に新しいファイル「hello.txt」を作成して「Hello, Git!」と書き込む

ファイルの状態を確認

git status

以下のメッセージが表示される(例)

git statusのファイルの色の意味

デフォルト設定では、以下のように色が使われます。

  • 赤(赤字): ステージングされていない変更(Untracked/Modified)
    • 例: 新しく追加されたが git add されていないファイル
    • 例: 既存のファイルを変更したが git add していない場合
  • 緑(緑字): ステージング済みの変更(Staged)
    • git add によってインデックスに追加されたファイル
    • これらのファイルは git commit するとリポジトリに記録される
  • 青(青字): 変更されたが追跡されているファイル(Tracked and Modified)
    • 既存のファイルを変更したが、まだ git add していない状態

ステージング(インデックスに追加)

git add hello.txt

または、以下のようにすると変更したすべてのファイルがステージングされる

git add .

コミット(変更を記録)

git commit -m "初回コミット"

以下のメッセージが表示される(例)

コミットとコミットメッセージ

Gitのコミットは、ロールプレイングゲーム(RPG)のセーブのようなものです。RPGでは、重要な進行状況を保存することで、失敗してもやり直せるようになります。同様に、Gitのコミットも、コードのある時点での状態を保存し、必要に応じて過去の状態に戻ることができます。

しかし、単にセーブをするだけでなく、その内容を分かりやすく記録することが重要です。RPGのセーブデータに「村に到着」や「ボス戦前」といった説明があると便利なように、Gitのコミットメッセージも「バグ修正」や「新機能追加」といった具体的な成果を表現するのが望ましいです。適切なメッセージを付けることで、後から見返したときに変更内容を把握しやすくなり、開発の効率が向上します。

Gitにステージングエリアがある理由

Gitのコミットは、ロールプレイングゲーム(RPG)のセーブのようなものです。RPGでは、重要な進行状況を保存することで、失敗してもやり直せるようになります。同様に、Gitのコミットも、コードのある時点での状態を保存し、必要に応じて過去の状態に戻ることができます。

しかし、単にセーブをするだけでなく、その内容を分かりやすく記録することが重要です。RPGのセーブデータに「村に到着」や「ボス戦前」といった説明があると便利なように、Gitのコミットメッセージも「バグ修正」や「新機能追加」といった具体的な成果を表現するのが望ましいです。適切なメッセージを付けることで、後から見返したときに変更内容を把握しやすくなり、開発の効率が向上します。


3. 履歴の確認と巻き戻し

3.1 コミット履歴の確認

簡易ログ表示

git log --oneline

以下のメッセージが表示される(例)

簡易ログ表示の意味

  • d292588 は、最新のコミットのハッシュ値(SHA-1)の先頭7文字で、一意の識別子です。
  • (HEAD -> master) は、現在のブランチが master であり、HEAD(作業中のブランチの参照)がその最新コミットを指していることを示します。
  • 初回コミット は、コミットメッセージです。

つまり、この表示は「master ブランチの最新コミット(初回コミット)の識別子が d292588 である」という意味になります。

詳細なログ表示

git log

以下のメッセージが表示される(例)

詳細なログ表示の意味

  1. commit d2925884ec203c4fc234570088edcbb4556d4c86
    • コミットのSHA-1ハッシュ(識別子)で、Gitがこのコミットを一意に識別するためのものです。
  2. (HEAD -> master)
    • HEAD は現在作業している最新のコミットを指すポインタ。
    • master は現在のブランチ。つまり、HEADmaster の最新コミットを指しています。
  3. Author: yusei <yuu@saycon.co.jp>
    • このコミットを作成したユーザーの名前とメールアドレスを示します。
  4. Date: Sun Mar 2 17:28:19 2025 +0900
    • このコミットが作成された日時(日本時間+09:00)です。

この情報は、Gitの履歴管理で「誰が、いつ、どんな変更をしたか」を把握するのに役立ちます。


3.2 変更の比較

「hello.txt」を開いて2行目に「Hi, Git!」と書き込んで保存する

現在のブランチと最後のコミットの比較

git diff

以下のメッセージが表示される(例)

diffのメッセージの意味

1. diff --git a/hello.txt b/hello.txt
  • hello.txt に対する変更を比較することを示します。
  • a/hello.txt は変更前(旧バージョン)、b/hello.txt は変更後(新バージョン)。

2. index 7f118ff..6889789 100644
  • 7f118ff は変更前の hello.txt のハッシュ値。
  • 6889789 は変更後の hello.txt のハッシュ値。
  • 100644 はファイルのパーミッション(通常のテキストファイルを意味する)。

3. --- a/hello.txt / +++ b/hello.txt
  • --- は旧バージョンのファイル。
  • +++ は新バージョンのファイル。

4. @@ -1 +1,2 @@
  • -1 は、旧ファイルの1行目が対象。
  • +1,2 は、新ファイルの1行目から2行目が対象(1行増えたことを意味)。

3.3 過去の状態に戻す

直前の変更を取り消す(ステージングを解除)

git reset HEAD hello.txt

直前の変更を完全に取り消す(未コミットの変更を破棄)

git checkout -- hello.txt

直前のコミットを取り消す(履歴を保持)

git revert HEAD

直前のコミットを取り消す(履歴も削除)

git reset --hard HEAD~1

4. 練習問題

問題1: コミット履歴を確認する

以下の手順で作業し、履歴を確認してください。

  1. git init でリポジトリを作成
  2. hello.txt を作成し、git add してコミット
  3. git log を使って履歴を確認

問題2: 変更を元に戻す

以下の手順で変更を元に戻す練習をしてください。

  1. note.txt を作成し、git add してコミット
  2. note.txt に追記し、git status で変更を確認
  3. git checkout -- note.txt で変更を破棄
  4. git reset --hard HEAD~1 でコミットごと削除

問題3: コミットを修正する

  1. README.md ファイルを作成し、「Gitの学習用リポジトリです」と記述する。
  2. git add してコミット(メッセージは「READMEを追加」)。
  3. コミット後に「ファイルの説明を追加しました」とメッセージを修正する。
  4. git log で修正されたか確認する。

ヒント:
コミットメッセージの修正には git commit --amend を使用します。


問題4: コミット履歴を調べて特定の状態に戻す

  1. data.txt を作成し、数回に分けて変更を加えてはコミットを繰り返す。
  2. git log --oneline でコミット履歴を確認し、2つ前のコミットの状態に戻す。
  3. その状態のまま作業を続ける場合と、元に戻る場合の両方の方法を試す。

ヒント:

  • git checkout <コミットID> で過去の状態に移動できます。(※分岐する場合はブランチを切る)
  • git reset --hard <コミットID> で完全に過去の状態に戻せます。(注意: 変更が消える)

問題5: ステージングエリアの操作

  1. task.txt を作成し、適当な内容を記述する。
  2. git add task.txt でステージングする。
  3. ステージング後に「追加のタスク」を追記する。
  4. 追記した変更のみをステージングから除外し、最初に追加した内容だけをコミットする。
  5. git diff --staged でコミット予定の内容を確認する。

ヒント:

  • git reset HEAD <ファイル名> でステージングを解除できます。
  • git diff で作業ツリーの変更、git diff --staged でステージング済みの変更を確認できます。

この流れで約1ヶ月間、Gitの基本を学習し、しっかりローカルリポジトリでの操作に慣れていきましょう!

セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。