皆さん、こんにちは!
エンジニアアイドル「ハックガールズ」の堤沙也と濱ヶ崎美季です。
私達と一緒にGitを学ぶこの連載、第4回からは、具体的によく使うコマンドの使い方や動きについて見ていきます!
Gitの基本的な使い方とコマンド
Gitの基本的な使い方の流れを、よく使うコマンドにそって確認していきましょう。
まず、Gitの概念として、下記の3つの「場所」を把握しておく必要があります。
- ワーキングディレクトリ(作業ディレクトリ)
- ステージングエリア
- Gitディレクトリ(リポジトリ)
ワーキングディレクトリとは、その名の通り、自分自身が作業を行うローカルディレクトリのことです。git initされたあとのローカルディレクトリで、ファイルの新規作成や編集を行った際は、まずこのワーキングディレクトリに存在する状態になります。
そして、ステージングエリアとは、位置的にはワーキングディレクトリとGitディレクトリの中間の位置にあります。
わかりやすい日本語に例えると、Gitディレクトリに「登録」する前の「仮登録」といった状態がステージングという作業を行ったあとの状態になります。
ワーキングディレクトリで作成・編集したファイルに対して
というコマンドを実行することで、その変更がステージングに上がった状態になります。
そして、Gitディレクトリ(リポジトリ)とはファイルやディレクトリの状態を記録する場所のことです。
先ほどのステージングエリアが「仮登録」だとすると、こちらが「本登録」といったイメージを持つとわかりやすいかと思います。
さらに、リポジトリには、ローカルリポジトリ・リモートリポジトリという2つの概念が存在します。
ローカルリポジトリとは、リモートに送る前に手元でファイルの変更を記録しておく場所。
というコマンドで、対象のファイルがコミットされた状態、すなわちローカルリポジトリに登録された状態になります。
そして、リモートリポジトリにその変更を反映させるコマンドが
というコマンドです。
リモートリポジトリとは、複数人で共有できる、ローカルリポジトリ以外のネットワーク上やファイル上に存在するものです。
おさらいしましょう。
たとえば、sample.txtというファイルをワーキングディレクトリで作成したとします。このファイルに対し、
と実行するとsample.txtはステージング状態になります。
さらにここで、
と実行することで、リポジトリに変更が反映された状態となります。
なお、今そのファイルがどの段階にあるのか確認したい際には、
と実行すれば、状態をメッセージとともに見ることができます。
なお、ステージングエリアの存在意義は「ひとつのコミットには主題となる変更と無関係な変更を含めない」というポリシーを実現しやすくなることにあります。
たとえば「バグ修正Aとバグ修正B」をひとつの変更としてセットでcommitしてしまった場合にあとからcommitの打ち消しをする必要が発生した場合など、非常に困ってしまうのです。
pullとpush
ここまで自身の手元で作業したファイルを共有リポジトリに反映するまでの流れを見てきましたが、逆に、他人がリモートリポジトリに登録した変更を取り込むにはどうしたら良いのでしょうか。
ここで登場するコマンドが
です。
Gitの醍醐味は複数人での共同開発が容易にできること。pullすることで、リモートリポジトリの変更内容がローカルリポジトリのブランチに反映されます。
さて、ブランチとは何でしょうか。ブランチとは、Git管理下にあるファイルの変更履歴を、分岐して記録していくためのGitの機能です。
通常、git initした直後は、すべてのファイルが「masterブランチ」と呼ばれるブランチ上に存在します。ここから開発の用途に合わせて、たとえば「developブランチ」「designブランチ」「fix_hogeブランチ」などといった派生ブランチを切っていきます。
なぜブランチを分岐させる必要があるのかというと、複数の変更を同時進行で行いたい場合に片方の変更が、もう片方の変更とぶつかり合うことを防ぐためです(※変更が競合することをコンフリクトといいます)。
そして、切ったブランチはあとから本筋に統合することが可能です。この作業は git merge と呼びますが、ここはまた奥深いので、詳しい話は次回以降にしましょう。
話を戻します。
git pullコマンドを叩いた時に起こることは、リモートのブランチの状態をローカルのブランチにマージするということです。
つい先ほど省略しましたが、マージとはすなわち変更を取り込んで自身の状態に統合すること。実際は git pull コマンドの後にリモートブランチ名などを指定します。git pullすることにより、他者の変更を取り込み、その変更を起点に更新を続けていくことができるようになります。