FE EXAM

Git(分散型バージョン管理)

分散型のバージョン管理システムで、変更履歴をコミット単位で管理する仕組み。

INTERACTIVE VISUALIZATION
main
feature
ステージング
フェーズ
idle
コミット数
2
作業ファイル
変更なし
シナリオ
ステップ1 / 7
STEP 1/7はじめの状態すでに2つのコミット(=変更履歴の記録単位)が main ブランチに積まれています。Git は、こうしたコミットを点でつないだ「コミットツリー」として履歴を管理します。これから新しい変更を1つ加えていきます。
実行コマンド
$ (コマンド待機中)
maina1初期コミットb2README追加
解説

📌
Gitとは

c1c2c3c4コミット(変更の記録)が積み重なる過去 ← → 最新

Git(ギット)とは、代表的な分散型バージョン管理システムです。ソースコードの変更履歴を「コミット」という単位で記録し、点をつないだ「コミットツリー」として管理します。

身近な例で考えると、ゲームのセーブデータに似ています。区切りのよいところでセーブ(コミット)しておけば、あとから「あのセーブ地点に戻る」「別のルートを試す」ことができます。Git は、こうしたセーブを何百回でも積み重ねて、いつでも過去の状態を呼び出せる仕組みです。

上のツールで▶ボタンを押すと、ファイルを変更し、add でステージングし、commit で履歴に記録し、branch で分岐して merge で統合するまでの流れを、コミットツリーの変化として確認できます。

⌨️
主要コマンド

Git を使いこなすには、まず次の基本コマンドを覚えるとよいでしょう。
add:変更をステージング(次のコミットに含める変更として登録)する
commit:ステージングの内容を履歴に記録する
branch:分岐(並行作業用の枝)を作る
merge:分岐した変更を統合する
push / pull:リモート(共有用のリポジトリ)と履歴を同期する

とくに重要なのが add → commit の2段階です。いきなり履歴に記録するのではなく、まず add で「今回まとめて記録したい変更」を選び、それから commit で確定します。書類を封筒に入れてから提出する、という2ステップだとイメージすると分かりやすいです。

作業を共有するときは push で自分のコミットをリモートに送り、pull で他人のコミットを取り込みます。これにより、複数人が同じプロジェクトを安全に共同編集できます。

分散型の利点

リモート開発者A完全な複製開発者B完全な複製開発者C完全な複製

Git のような分散型では、各自が履歴を含むリポジトリの完全な複製を手元に持ちます。1つの中央サーバだけが履歴を持つ「集中型」とは、ここが大きく異なります。

この仕組みから、次のような利点が生まれます。
オフラインでコミットできる:手元に履歴があるため、ネットワークに接続できなくても作業を記録できる
中央サーバ障害に強い:サーバが止まっても、各自の複製から履歴を復元できる
ブランチ運用が軽快:分岐や統合が手元で素早く行え、気軽に試せる

それぞれが「完全なコピーを持ち歩く」イメージは、全員が同じ蔵書のコピーを各家庭に持っているようなものです。図書館(中央サーバ)が一時的に閉まっても、誰もが自分の手元の本を読めますし、後で照らし合わせて内容をそろえられます。

📌
ブランチとマージの仕組み

c1c2c3c4mainf1f2feat分岐マージfeatureで試して → mainに統合

ブランチとは、コミット履歴の「分岐」です。本流(多くは mainmaster ブランチ)から枝を分けて、本流に影響せず並行して作業できます

なぜブランチが必要か。本流に直接変更を加えると、作りかけの不完全なコードが他の人の作業に影響します。ブランチを使えば「試行錯誤は自分のブランチで、完成したら統合」という流れを作れます。
feature ブランチ(=機能ブランチ):新しい機能を追加するための作業専用の枝
マージ:作業が完了したブランチの変更を本流に取り込む操作

身近な例で考えると、本の原稿に直接赤ペンで書き込まずコピーに書き込んで、良ければ反映するのと同じです。コピー(ブランチ)で試せるので、本流(main)はいつでも安定した状態を保てます。上のツールの「branch」「merge」のステップで、この分岐と統合の様子をコミットツリーで確認できます。

📌
集中型 vs 分散型(なぜ違うか)

集中型(SVN等)中央サーバのみDevDev分散型(Git)リモート(共有)DevDev分散型では各自が完全な履歴を持つ

バージョン管理には集中型分散型の2種類があります。Gitは分散型の代表です。

項目集中型(例:SVN)分散型(例:Git)
履歴の場所中央サーバのみ各自の手元にも完全コピー
オフライン作業基本的に不可コミットなど多くの操作が可能
サーバ障害履歴を参照できない各自の複製から復元できる
ブランチ操作比較的重い軽快で気軽に作れる

なぜ分散型が広まったか。集中型では、中央サーバに接続できない状況や、サーバが止まった時に作業が完全に止まるという弱点がありました。分散型では各自が履歴の完全なコピーを持つため、ネット環境がなくても手元でコミットでき、サーバ障害にも強くなります。

図書館にしかない本(集中型)だと図書館が休館中は読めませんが、各自がコピーを持っている(分散型)なら図書館が閉まっていても読めます。この「自分の手元に完全な履歴がある」という点が分散型の最大の強みです。

練習問題

🎯
基本情報技術者 練習問題

Q1.Gitの説明として最も適切なものはどれか。
A.分散型のバージョン管理システムで、変更履歴をコミット単位で管理する
B.1つの中央サーバだけが履歴を持つ集中型のバージョン管理システム
C.プログラムのバグを取り除くための支援ツール
D.ソースコードを機械語に翻訳するツール
Q2.Gitで変更をステージング(次のコミットに含める変更の登録)するコマンドはどれか。
A.git commit
B.git add
C.git merge
D.git branch
Q3.分散型バージョン管理システムの利点として正しいものはどれか。
A.各自がリポジトリの完全な複製を持ち、オフラインでもコミットできる
B.中央サーバが停止すると誰も履歴を確認できなくなる
C.ブランチを作ることが一切できない
D.履歴は最新の1世代しか保存できない

関連コンテンツ