Git

Gitとは

Gitは、ファイルの変更履歴を記録・共有するバージョン管理システムです。「いつ・誰が・何を・なぜ変えたか」をすべて残し、任意の時点に戻したり、複数人の作業を合流させたりできます。GitHubはGitのリポジトリをホスティングするサービスです。

バージョン管理が無い現場では 報告書_最終_修正2.docx のようなファイル名で世代を管理し、上書きで他人の変更が消えます。Gitが解決するのは過去をたどれないこと同時に触ると壊れることの2つで、ブランチ運用もレビューも自動テストもこの土台に載っています。

git add .                     # 変更をステージに載せる
git commit -m "検索機能を追加" # 履歴として記録
git push origin main          # リモートへ共有

初学者向けポイント

  • 分散型 = 全員が完全な履歴のコピーを持つ。オフラインでもコミットできる
  • コミットは小さく・意味の単位で刻む。1コミット1目的が、後から読み返せる履歴の条件

コミットは差分ではなくスナップショット

多くのバージョン管理システムが「前回からの変更差分」を積み上げるのに対し、Gitのコミットが保存するのはその時点のファイル全体のスナップショットです。変更のなかったファイルは以前の中身への参照が使い回されるため、丸ごと記録しても容量はほとんど膨らみません。

おかげで任意のコミットを再計算なしに取り出せます。git diff が見せる差分は保存物ではなく、2つのスナップショットをその場で比較した結果です。

用語の地図

Gitの用語は「変更がどこにあるか」で並べると迷いません。

  • 作業ツリー / ステージ / リポジトリ — 編集中のファイル、次のコミットに載せると決めた変更、記録済みの履歴。git add は真ん中へ、git commit は履歴へ移します
  • コミット / ブランチ / タグ — 履歴上の点、それを指す動く目印、動かない目印。タグは [[セマンティックバージョニング]] の番号と対応させるのが定番です
  • ローカル / リモート — 手元の完全な履歴と、共有用のリポジトリ。pushpull はこの2つの同期にすぎません
  • マージ / リベース — 分かれた履歴を合流させる2つのやり方。前者は合流点を残し、後者は分岐を一本に付け替えます

チームで使う最小の流れ

  1. main からブランチを切る
  2. コミットを積む
  3. プルリクエストを開いてレビューを受ける
  4. [[CI/CD]] のチェックが通ったらマージ

これは GitHub Flow と呼ばれる型です。他の型との違いや選び方は [[ブランチ戦略]]、プルリクエストで何を指摘するかは [[コードレビュー]] にまとまっています。

つまずきポイント

場面対処
コンフリクト同じ箇所を複数人が変更。落ち着いて両方の意図を確認して手動で統合
コミットの取り消しgit revert(履歴を残して打ち消し)が安全
秘密情報をコミットした履歴からの完全削除は困難。キーの無効化・再発行が先

Gitから次に読む地図

チームの決めごとを作る

人数が増えると「いつ分岐し、いつ合流するか」の取り決めが要ります。それが [[ブランチ戦略]]、マージ前に人が読む工程が [[コードレビュー]]、作業を1件ずつ記録してブランチと結ぶのが [[チケット管理]] です。

履歴を自動処理の起点にする

pushやプルリクエストをきっかけにテストとデプロイを機械へ任せるのが [[CI/CD]]。必須チェックや並行実行の制御まで要るようになったら [[CI/CDパイプラインのゲートと並行制御]] です。

リポジトリに何を入れるか

コードだけではありません。依存の版を固定するロックは [[npmとパッケージ管理]]、サーバー構成は [[IaC]]、設計の経緯は [[ドキュメンテーション]]。逆に入れてはいけないのが認証情報で [[シークレット管理]] が扱います。

操作環境と公開の作法

Gitは本来コマンドラインの道具で、土台は [[シェルとコマンドライン]]、リモート接続で使う鍵の仕組みが [[SSH]]。公開する側に回るなら [[OSSとライセンス]] が利用条件を決めます。

関連技術とのつながり

  • [[ブランチ戦略]] — 分岐と合流の運用ルール
  • [[コードレビュー]] — マージ前に品質を確かめる工程
  • [[CI/CD]] — pushをきっかけに自動処理を走らせる
  • [[シェルとコマンドライン]] — Gitの本来の操作環境
Q: Gitが「分散型」と呼ばれる理由は?
- [ ] サーバーが複数の拠点に分散配置されているから
- [x] 全員が完全な履歴のコピーを持ち、オフラインでもコミットできるから
- [ ] ファイルを分割して保存するから
解説: 分散型とは全員が完全な履歴のコピーを持つことで、オフラインでもコミットできます。

Q: コミットを安全に取り消したいときに使うコマンドは?
- [ ] git push
- [ ] git add
- [x] git revert
解説: git revertは履歴を残したまま変更を打ち消すため、安全な取り消し方法です。

Q: 秘密情報をコミットしてしまったとき、最初にすべきことは?
- [x] キーの無効化・再発行
- [ ] コミットメッセージの修正
- [ ] ブランチ名の変更
解説: 履歴からの完全削除は困難なため、まず漏れたキーの無効化・再発行を優先します。

Q: `git add` が行う操作はどれ?
- [ ] 変更を履歴のコミットとして確定する
- [x] 変更を「次のコミットに載せる」ステージへ移す
- [ ] 変更をリモートのリポジトリへ送る
解説: 作業ツリー → ステージ → 履歴の順に移ります。履歴への確定は commit、リモートへの共有は push の役割です。