バージョン管理とは
バージョン [版] 管理とは…
ファイルやデータの変更履歴を管理するためのしくみを「バージョン管理システム」と言う。
例えば、ひとつの共有すべきファイルを複数人の人が編集した時に、どれが最新でどれが正しいデータなのかわかりにくくなるため、わかりやすくするために利用される。
特にソフトウェア開発においては、ソースコードの管理に用いられることが多い。

バージョン管理のしくみ
バージョン管理システムとは、「誰が、いつ、どこを変えたのか?」などのデータの変更履歴を「リポジトリ」と呼ばれる場所(ファイル)に全て記録しており、開発者はリポジトリに履歴を残したり、履歴から元の状態に戻したりすることが可能である。

Git とは
Git (ギット) とは…
バージョン管理システムの中でも「分散バージョン管理システム」と呼ばれるもの。
2005年に Git が開発されるまでは、各ユーザの変更箇所がカブってしまったりすると、先に編集した人の内容が上書きで消えたりなど、色々な不整合がたびたび起きていた。
その理由は「リポジトリが1つしかないため」であり、それを解消するためにリポジトリ自体を分散してしまうように開発されたのが Git である。

分散バージョン管理方法 とは
分散バージョン管理システムとは、全体を統括する「リモートリポジトリ」から、各ユーザが持つ「ローカルリポジトリ」に分け、ローカルでリポジトリ(変更履歴)を変更してから、リモートと同期するしくみ。
これによりネットワークが繋がらない環境でも管理ができ、従来に比べて全体の整合性を保ちやすくなった。

ブランチとは
ブランチ とは
ブランチは、変更履歴を分岐させる機能。同じリポジトリを複数の異なる作業内容で同時に作業するための機能で、それぞれの作業が完了したら、合体させたりすることができる。
作業中は、ブランチ同士をマージ(結合)させるまで他のブランチの影響を受けない。

ブランチ戦略
ブランチ戦略とは、効率的にバージョン管理を行うためのブランチ取り扱いルールです。
Gitブランチ機能をうまく活用するために、様々なアイデアがあり、それを「ブランチモデル」と言います。
git-flow ブランチモデル
ブランチモデルで最も有名なのが git-flow というモデルで、以下の様にブランチ管理します。
- master ブランチ
- hotfix ブランチ
- release ブランチ
- develop ブランチ
- feature ブランチ

Git を利用したサービス
Git はサービスではなくツールそのもの
GitHub (ギット・ハブ) 、GitLab (ギット・ラボ) など、“Git” と名前がつくサービスが多数あり混乱しやすいので、GitHub を例にして、ここでツールとサービスの違いを整理しておきます。

- Git:分散バージョン管理ができるツール
- GitHub:Git を利用したWebサービス (Git ホスティングサービス)
GitHubのようなGit ホスティングサービスは、他にもたくさん存在する。
クラウド (Web上で利用) もあれば、オンプレミス (サーバにインストールして利用) もある。
Git 操作フロー
Git の基本フロー
Git の利用フローは「ローカルで作業し、リモートに反映させる」が基本。

Git の変更反映時の基本フロー
Git では、自分の作業を変更履歴として反映させるために、以下の操作が行われる。

Git の変更反映時の基本フロー
先ほどの操作内容と、実際のファイルの動きを表すと、以下のとおり。

Git 操作ツール
GUIツールとCLIツール
GUI とはマウスや簡単なキー入力などだけで、直感的に操作ができるものを指し、CLI とはコマンドライン(真っ黒画面で文字だけ出るような画面)で操作するものを指す。

Git の主要な操作方法 ① CLONE
リモートリポジトリからローカルリポジトリを生成する
リモートリポジトリを自分のマシンにコピーするコマンド。
git clone (リモートリポジトリのパス/URL)
例:git clone git@gitlab.com:xxx/kenshuRepo.git

Git の主要な操作方法 ② STATUS
ローカルリポジトリの作業状況を確認する
ローカルリポジトリの現在の差分がどのファイルかを確認するコマンド。
git status

Git の主要な操作方法 ③ ADD
ステージング対象を指定する
ローカルの作業ファイルの中で、どれを反映候補にするか決定する。この後も作業は可能。
git add (ステージング対象 or ドット「.」)
例:git add source1.html source2.html style.css

Git の主要な操作方法 ④ COMMIT
差分(変更分)を記録する
ローカルの最後の最新状態からの差分(前回のコミットからの変更分)を記録するコマンド。
git commit または短縮形:git commit -m ‘コミットメッセージ’

コミットメッセージ
コミットを行う際には、必ず「何が変わったのか」の短い概要を一緒に記録する。
これをコミットメッセージと言い、標準的に以下のような書き方をする。
(終わった後は、保存コマンド(Linux系OSなら :wq など)を実行して確定する)

Git の主要な操作方法 ⑤ PUSH
ローカルリポジトリからリモートリポジトリに反映する
リモートリポジトリに自分の変更履歴を同期させるコマンド。
git push (リモートリポジトリ名) (リモートブランチ名)
例:git push origin master

Git の主要な操作方法 ⑥ PULL
リモートリポジトリから最新状態を取り込む
リモートリポジトリからローカルリポジトリに最新状態を「取り込む」コマンド。
git pullまたは git fetch コマンド後に git merge

付録:Git コマンド一覧
# | コマンド | 処理内容 |
1 | git clone {PATH} | リモートからローカルにリポジトリを複製する |
2 | git pull | リモートからローカルに最新を取り込む(追加する) |
3 | git status | 作業状況を一覧表示する |
4 | git add {. または file_path} | 作業中のコミット候補をステージングする (作業は継続可能) |
5 | git commit | コミットする(変更履歴を記録)コミットメッセージ必須 |
6 | git push {repo} {branch} | ローカルからリモートにリポジトリ内容を反映させる |
7 | git merge {branch} | リモートからローカルに最新を取り込む(追加する) |
8 | git checkout {branch} | 「現在作業しているブランチ」を指定ブランチに切り替える |
9 | git branch | ブランチ一覧を表示する |
# | コマンド | 処理内容 |
1 | git commit –amend | 直前のコミットを書き換える(再編集) |
2 | git branch -d {branch} | 指定ブランチを「ローカルブランチ」から削除する |
3 | git log | コミットのログ(履歴)を表示する |
4 | git reset –soft HEAD~2 | 最新コミットから2件分を取り消す(作業中の変更は残す) |
5 | git reset –hard HEAD~2 | 最新コミットから2件分を取り消す(作業中の変更も取消) |
6 | git config –list | gitの設定情報が key=value 形式で一覧表示される |
7 | git config –global –list | gitのグローバルな設定情報が一覧表示される |
8 | git config user.name “x” | gitのユーザ名を設定(x の部分)–global 必要かも |
9 | git config user.email xxx | gitのユーザパスワードを設定(xxx の部分)–global 必要かも |
※最新の情報の取得・更新に努めておりますが、掲載内容については、その正確性、完全性、有用性、最新性等についていかなる保証もするものではありません。