目指せ!脱初心者 Gitの基本を図解で解説

Coding

目指せ!脱初心者 Gitの基本を図解で解説

AndHAエンジニアチームです。

皆さんは開発時にGit使ってますか?

Gitを使ったバージョン管理を行っておくことで、急に機能を追加する必要があったり、差分ファイルの抽出を用意しなければならない、コードの振り返り、プルリクエストによるコードレビュー、近年増えつつあるJamstack対応などなど…挙げたらキリが無いほど、無くてはならない存在です。

Gitという単語を知っていても中々難しそうで後回しになっている方、一緒に学んでいきましょう。

今回はGitを使っていく上でよく出てくる機能を紹介していきます。

リポジトリとは

リポジトリとは、ファイルやディレクトリの状態を記録する場所の事です。
登録する度に作業内容のファイルやディレクトリなどの変更履歴が格納されていきます。

リモートリポジトリとローカルリポジトリについて

リモートリポジトリとローカルリポジトリについて

リモートリポジトリとは

名前の通り、ネットワーク上やファイル上に存在する複数の利用者で共有するリポジトリの事で、ローカルリポジトリの変更をリモートリポジトリへ反映して共有管理することができます。

※リモートとありますが必ずしもネットワーク上になければいけないという訳ではありません。

有名所だとGithubBacklog上のGitなどがリモートリポジトリになります。

ローカルリポジトリとは

ユーザーがローカルマシン上で作業するために利用するリポジトリです。
基本的にそのユーザーはこの領域にて変更履歴を管理しつつ、作業を行います。

2つのリポジトリを使い分けよう

普段の作業はローカルリポジトリを使って全て手元のマシン上で制作管理を行い、本番化やバグフィックスされたデータをリモートリポジトリにコミットしていきます。
また、リモートリポジトリをプル・フェッチ・クローン(後述します。)することで作業内容を引き継いで利用することが可能です。

コミットとは

ファイルやディレクトリの追加変更をリポジトリに記録する操作の事で、実行することでリポジトリ内に現在・過去までのコミットグラフが作成されます。

コミットとは

コミットは時系列順に繋がった状態でリポジトリに格納されるので、変更を辿ることで過去の変更履歴やその内容を知ることが出来ます。
また、コミット実行の際にはメッセージが必要になりますので、自分はもちろん、他の作業者に変更内容が分かりやすく伝わるようにメッセージを書くと良いでしょう。

人によってはコミットメッセージは様々ですが、まずは慣れるまでは何を行ったかを明確に残していきましょう。

慣れてきたら各社でお勧めとされているナレッジを参考にしたり、以下の様な絵文字を使ったコミットメッセージも分かりやすくて良いと思います。

gitmoji

ワークツリーとインデックスについて

ワークツリーとインデックスについて

ワークツリーとは(作業ツリー)

実際に作業しているディレクトリの事を指します。
他のブランチに切り替えたり、特定のコミットの状態にすることができます。

インデックスとは

ステージングエリアとも呼ばれ、リポジトリにコミットする準備をするための領域です。
リポジトリとワークツリー間のやりとりにはインデックス領域を経由されます。

ワークツリーとインデックス

ワークツリーでの追加変更点をインデックスに登録することで、リポジトリにコミットすることが可能となります。

リポジトリの共有

これまでの事を踏まえ、ローカルリポジトリとリモートリポジトリの変更履歴のやりとりについて紹介します。

リモートリポジトリにプッシュ

ローカルリポジトリの変更履歴をアップロードするには、Gitのプッシュ(Push)と呼ばれる操作を行います。
実行されると、ローカルリポジトリの内容がリモートリポジトリと同期されます。

リモートリポジトリにプッシュ

リモートリポジトリのクローン

リモートリポジトリの内容をローカルに複製するには、Gitのクローン(Clone)と呼ばれる操作を行います。
実行されると、リモートリポジトリの内容がローカル環境に複製することが出来ます。
また変更履歴も同時に複製されるので、元々のリポジトリと同じように参照やコミットを行うことが出来ます。
大規模なプロジェクトの場合は多くのファイルを取得・コピーすることとなるので、最新のソースファイルを取得する目的のみならばオプションでリビジョンを指定することも出来ます。

リモートリポジトリのクローン

リモートリポジトリからフェッチ・プル

他の作業者との作業内容を確認する場合にGitのフェッチ(Fetch)と呼ばれる操作を行います。
プル(Pull)と異なる点はリモートリポジトリの変更をローカルリポジトリにダウンロードのみでワークツリーには反映されませんので、必要があればローカルリポジトリにダウンロードした変更をワークツリーにマージする必要があります。

次にリモートリポジトリからローカルリポジトリに最新の変更履歴をダウンロードする際にGitのプル(Pull)と呼ばれる操作を行います。
Pullはフェッチとマージが同時に行われるようなイメージです。
とても便利なコマンドではありますが、仕組みを理解した上での利用をお勧めします。

リモートリポジトリからフェッチ・プル

ブランチ

ブランチとは履歴の流れを分岐して記録していくためのもので、分岐したブランチは他のブランチの影響を受けないため、同じリポジトリ中で複数の変更を同時に進めていくことができます。
また、分岐したブランチは他のブランチと合流(マージ)することで、一つのブランチにまとめ直すことが出来ます。

ブランチ

チームのメンバーは、他のメンバーの作業の影響を受けないように、メインのブランチから自分の作業専用のブランチを作成します。

そして作業の終わったメンバーは、メインのブランチに自分のブランチの変更を取り込んでいきます。(上図の「master」や「topics」の事)このようにすることで、他のメンバーの作業による影響を受けることなく、自分の作業に取り込むことができます。
また、作業単位で履歴を残すことで、問題が発生した場合に原因となる変更箇所の調査や対策を行うことが容易になります。

まとめ

今回はGitを使っていく上でよく出てくる機能を紹介してきました。

完全に紹介できた訳ではありませんが、まずは実際にGitに触れてみるのがオススメです。
コマンドラインで使うには敷居が高い…な方は以下のGUI系クライアントがお勧めします。

Sourcetree

GitHub Desktop

Gitkraken

次回以降は、Gitを使った便利なカスタムアクションなどを紹介していきます。

それでは、また。