★ 初級

01. Git 基本コマンド

Terraform のコードもただのテキストファイル。だから「いつ・誰が・どう変えたか」を Git で記録します。この章では、毎日使う 20 コマンドを役割ごとに整理します。

そもそも Git とは何か

Git は 「ファイルの変更履歴を保存する仕組み」 です。Word の「変更履歴」を、フォルダ全体に対して、しかもチーム全員と共有しながら使えると思ってください。

Terraform で書いた .tf ファイルは「いまの AWS 構成を作るレシピ」そのものです。レシピの履歴がないと、「先週は動いていたのに、誰かが変えた瞬間から壊れている」 という事故が起きても元に戻せません。Git があれば、git log で「いつ・誰が・どこを・なぜ」変えたかが全部追えます。

用語 リポジトリ (repository): Git で履歴管理しているフォルダ。
コミット (commit): 変更を「ひとかたまり」として記録した、履歴の 1 行。
リモート (remote): GitHub 上のリポジトリ。手元のリポジトリと同期する相手。

最初の 1 回だけやる初期設定

名前とメールアドレスは、コミット 1 件ごとに記録されます。最初に登録しておきます。

git config --global user.name  "Your Name"
git config --global user.email "you@example.com"
# ブランチのデフォルト名を main に
git config --global init.defaultBranch main

新しいリポジトリを作る/既存をコピーする

# 新規: いまのフォルダを Git 管理にする
git init

# 既存: GitHub から手元にコピー
git clone https://github.com/your-org/your-repo.git

毎日使うコマンド(add → commit → push)

Git の基本サイクルは 3 ステップです。

  1. 変更する: エディタでファイルを編集する
  2. git add: 「このファイルの変更をコミット対象にする」と指示する
  3. git commit: 履歴に 1 行追加する(メッセージ付き)
  4. git push: 手元の履歴を GitHub に送る
# 何が変わっているか見る
git status
git diff                    # まだ add していない変更
git diff --cached           # add 済みの変更(commit 直前のレビュー)

# ステージング(add)
git add main.tf             # 1 ファイル
git add .                   # カレント以下の全変更(注意して使う)

# コミット
git commit -m "feat: add VPC module for staging"

# GitHub に送る
git push origin main
注意 git add . は便利ですが、terraform.tfstate.tfvars など 絶対にコミットしてはいけないファイル まで含まれる事故の原因になります。次章の .gitignore 設定とセットで使ってください。

コミットメッセージのコツ

1 行目に「何をしたか」を簡潔に書きます。Conventional Commits のような型を 1 つ決めるとチームで揃います。

feat: add VPC module for staging   # 機能追加
fix: correct CIDR overlap in dev   # バグ修正
chore: bump aws provider to 5.80   # 雑務(依存更新など)
docs: add README to s3 module      # ドキュメント
refactor: extract iam to module    # 動作不変のリファクタ

ブランチを切って作業する

ブランチ (branch) は「履歴の枝分かれ」です。main ブランチを本番の正、と決めて、変更は必ず別ブランチで行ってから main にマージする のが標準的な使い方です。

git branch                  # ブランチ一覧
git switch -c add-vpc-module  # 作って切り替え(推奨)
# 旧式: git checkout -b add-vpc-module

# 作業して commit したら GitHub に push
git push -u origin add-vpc-module

その後 GitHub 上で Pull Request (PR) を開き、レビューと CI(GitHub Actions による terraform plan 等)を経て main にマージします。

ブランチを統合する(merge と rebase)

# merge: 取り込み履歴を残す(チーム作業の標準)
git switch main
git merge add-vpc-module

# rebase: 自分のコミットを main の最新の上に積み直す
git switch add-vpc-module
git rebase main           # 履歴をきれいに保てる、ただし衝突注意

リモートと同期する(pull / fetch)

git fetch origin            # GitHub の最新を取得(手元はまだ動かない)
git pull origin main        # fetch + 手元の main にマージ
git pull --rebase origin main  # マージコミットを作らず rebase で取り込む
使い分け 手元が散らかっている時は fetch → 状況を確認 → mergerebase を選ぶ、が安全です。pull は両方を一気にやるショートカットなので、最新の main から始めて作業する時に使います。

やり直す(reset / revert / stash)

# 直前のコミットを「なかったこと」にする(手元のみ、未 push 時に)
git reset --soft HEAD~1     # コミットだけ取り消し、変更は残る

# すでに push 済みのコミットを取り消す(履歴を残したまま打ち消すコミットを追加)
git revert HEAD

# 作業中の変更を一時的に退避(ブランチ切替したい時)
git stash
git stash pop               # 戻す
注意 git reset --hardgit push --force は履歴を破壊します。共有ブランチ(main など)には絶対に使わないこと。

コマンド早見表

カテゴリコマンド役割
確認git statusいまの状態
git diff変更内容
git log --oneline履歴一覧
編集git add <file>ステージング
git commit -m "msg"履歴に記録
git restore <file>変更を捨てる
ブランチgit switch -c <name>作って切替
git merge <name>マージ
git rebase mainmain の上に積み直す
同期git fetch取得のみ
git pull取得+マージ
git push送信
やり直しgit reset --soft HEAD~1直前のコミット取消
git revert <sha>打ち消しコミット
git stash / pop一時退避