01. Git 基本コマンド
Terraform のコードもただのテキストファイル。だから「いつ・誰が・どう変えたか」を Git で記録します。この章では、毎日使う 20 コマンドを役割ごとに整理します。
この章の目次
そもそも Git とは何か
Git は 「ファイルの変更履歴を保存する仕組み」 です。Word の「変更履歴」を、フォルダ全体に対して、しかもチーム全員と共有しながら使えると思ってください。
Terraform で書いた .tf ファイルは「いまの AWS 構成を作るレシピ」そのものです。レシピの履歴がないと、「先週は動いていたのに、誰かが変えた瞬間から壊れている」 という事故が起きても元に戻せません。Git があれば、git log で「いつ・誰が・どこを・なぜ」変えたかが全部追えます。
用語
リポジトリ (repository): Git で履歴管理しているフォルダ。
コミット (commit): 変更を「ひとかたまり」として記録した、履歴の 1 行。
リモート (remote): GitHub 上のリポジトリ。手元のリポジトリと同期する相手。
コミット (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 ステップです。
- 変更する: エディタでファイルを編集する
git add: 「このファイルの変更をコミット対象にする」と指示するgit commit: 履歴に 1 行追加する(メッセージ付き)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 → 状況を確認 → merge や rebase を選ぶ、が安全です。pull は両方を一気にやるショートカットなので、最新の main から始めて作業する時に使います。
やり直す(reset / revert / stash)
# 直前のコミットを「なかったこと」にする(手元のみ、未 push 時に)
git reset --soft HEAD~1 # コミットだけ取り消し、変更は残る
# すでに push 済みのコミットを取り消す(履歴を残したまま打ち消すコミットを追加)
git revert HEAD
# 作業中の変更を一時的に退避(ブランチ切替したい時)
git stash
git stash pop # 戻す
注意
git reset --hard や git 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 main | main の上に積み直す | |
| 同期 | git fetch | 取得のみ |
git pull | 取得+マージ | |
git push | 送信 | |
| やり直し | git reset --soft HEAD~1 | 直前のコミット取消 |
git revert <sha> | 打ち消しコミット | |
git stash / pop | 一時退避 |