Chapter 7: Git 入門(概念編)
バージョン管理の考え方と Git の基本概念
Chapter 7: Git 入門(概念編)
7.1 バージョン管理とは何か
バージョン管理とは、ファイルの変更履歴を管理する仕組みのことです。
たとえば、あなたが小説を書いているとします。第1章を書いて、第2章を追加して、第1章を大幅に書き直した。でも「やっぱり書き直す前の方が良かった」と思ったとき、バージョン管理があれば一瞬で元に戻せます。
ソフトウェア開発でも同じです。プログラムに新機能を追加したけれどバグが出てしまった。バージョン管理があれば、バグのない以前の状態にすぐ戻せます。
バージョン管理なしの問題点
project/
├── index_v1.html
├── index_v2.html
├── index_最終.html
├── index_最終2.html ← どれが最新?
├── index_本当に最終.html
└── index_20240315.htmlこのようなファイル名でのバージョン管理は:
- どれが最新か分からなくなる
- いつ・誰が・何を変えたか分からない
- チームで作業すると上書き事故が起きる
7.2 なぜ Git が必要なのか
Git はこれらの問題を根本から解決します。
| 問題 | Git による解決 |
|---|---|
| どれが最新か分からない | 最新は常に1つ(ブランチの先端) |
| いつ誰が何を変えたか不明 | コミット履歴に記録される |
| 上書き事故 | コンフリクト検知で事故を防ぐ |
| 並行作業できない | ブランチで独立した作業空間を確保 |
| 過去に戻せない | 任意のコミットに戻れる |
Git は 2005年にLinuxの生みの親、リーナス・トーバルズが開発しました。現在は世界中のソフトウェア開発で標準ツールとして使われています。
7.3 Git の基本概念
リポジトリ(Repository)
リポジトリとは、Gitが管理するプロジェクトのフォルダです。「リポジトリ」を略して「リポ」や「repo」とも呼びます。
git init コマンドを実行すると、フォルダ内に .git/ という隠しフォルダが作られます。ここにすべての履歴データが格納されています。
my-project/ ← リポジトリ(プロジェクトのフォルダ)
├── .git/ ← Gitの管理データ(触らない)
├── index.html
├── style.css
└── script.jsコミット(Commit)
コミットとは、**変更のスナップショット(記録)**です。「保存ポイント」と考えると分かりやすいでしょう。
各コミットには以下の情報が含まれます:
- 変更内容(どのファイルが変わったか)
- コミットメッセージ(変更の説明)
- 作者情報(誰が変更したか)
- 日時(いつ変更したか)
- 固有のID(SHA-1ハッシュ)
ブランチ(Branch)
ブランチとは、開発の分岐点です。チームで複数人が別々の機能を同時に開発するときに使います。
メインの開発ライン(main ブランチ)を汚さずに、別のブランチで新機能を開発できます。完成したらメインに取り込む(マージする)という流れです。
ステージングエリア(Staging Area)
Git には「ステージングエリア」という中間地点があります。変更をコミットする前に「どの変更を記録するか」を選別する場所です。
この仕組みのおかげで、「今日変更したファイルのうち、Aファイルだけをコミットして、Bファイルはまだコミットしない」という細かいコントロールができます。
7.4 ローカルリポジトリとリモートリポジトリ
Git には2種類のリポジトリがあります。
| 種類 | 場所 | 説明 |
|---|---|---|
| ローカルリポジトリ | 自分のPC | 自分だけの作業場所 |
| リモートリポジトリ | GitHub等のサーバー | チームで共有する場所 |
よく使う用語まとめ
| 用語 | 意味 |
|---|---|
clone | リモートリポジトリをローカルにコピー |
push | ローカルの変更をリモートに送る |
pull | リモートの最新変更をローカルに取得 |
fetch | リモートの変更情報だけを取得(マージしない) |
まとめ
Git の核心的な概念を整理します。
- リポジトリ: Gitが管理するプロジェクトフォルダ
- コミット: 変更の記録(保存ポイント)
- ブランチ: 独立した開発ライン
- ステージングエリア: コミット前の選別場所
- ローカル / リモート: 自分のPCとサーバーの2段構成
概念を理解したら、次は実際にコマンドを打って体験してみましょう。
次のステップ: 実践編 でコマンドを実際に手を動かして学びます。