ハックガールズと学ぼう!ゼロから学ぶGit講座

第4回 Gitの基本的なコマンドと使い方

この記事を読むのに必要な時間:およそ 2 分

皆さん,こんにちは!

エンジニアアイドル「ハックガールズ」の堤沙也と濱ヶ崎美季です。

私達と一緒にGitを学ぶこの連載,第4回からは,具体的によく使うコマンドの使い方や動きについて見ていきます!

Gitの基本的な使い方とコマンド

Gitの基本的な使い方の流れを,よく使うコマンドにそって確認していきましょう。

まず,Gitの概念として,下記の3つの「場所」を把握しておく必要があります。

  • ワーキングディレクトリ(作業ディレクトリ)
  • ステージングエリア
  • Gitディレクトリ(リポジトリ)

ワーキングディレクトリとは,その名の通り,自分自身が作業を行うローカルディレクトリのことです。git initされたあとのローカルディレクトリで,ファイルの新規作成や編集を行った際は,まずこのワーキングディレクトリに存在する状態になります。

そして,ステージングエリアとは,位置的にはワーキングディレクトリとGitディレクトリの中間の位置にあります。

わかりやすい日本語に例えると,Gitディレクトリに「登録」する前の「仮登録」といった状態がステージングという作業を行ったあとの状態になります。

ワーキングディレクトリで作成・編集したファイルに対して

git add

というコマンドを実行することで,その変更がステージングに上がった状態になります。

そして,Gitディレクトリ(リポジトリ)とはファイルやディレクトリの状態を記録する場所のことです。

先ほどのステージングエリアが「仮登録」だとすると,こちらが「本登録」といったイメージを持つとわかりやすいかと思います。

さらに,リポジトリには,ローカルリポジトリ・リモートリポジトリという2つの概念が存在します。

ローカルリポジトリとは,リモートに送る前に手元でファイルの変更を記録しておく場所。

git commit

というコマンドで,対象のファイルがコミットされた状態,すなわちローカルリポジトリに登録された状態になります。

ワーキングディレクトリ,ステージングエリア,リポジトリ

ワーキングディレクトリ,ステージングエリア,リポジトリ

そして,リモートリポジトリにその変更を反映させるコマンドが

git push

というコマンドです。

リモートリポジトリとは,複数人で共有できる,ローカルリポジトリ以外のネットワーク上やファイル上に存在するものです。

おさらいしましょう。

たとえば,sample.txtというファイルをワーキングディレクトリで作成したとします。このファイルに対し,

git add sample.txt

と実行するとsample.txtはステージング状態になります。

さらにここで,

git commit sample.txt

と実行することで,リポジトリに変更が反映された状態となります。

なお,今そのファイルがどの段階にあるのか確認したい際には,

git status sample.txt

と実行すれば,状態をメッセージとともに見ることができます。

なお,ステージングエリアの存在意義は「ひとつのコミットには主題となる変更と無関係な変更を含めない」というポリシーを実現しやすくなることにあります。

たとえば「バグ修正Aとバグ修正B」をひとつの変更としてセットでcommitしてしまった場合にあとからcommitの打ち消しをする必要が発生した場合など,非常に困ってしまうのです。

commitの概念

commitの概念

pullとpush

ここまで自身の手元で作業したファイルを共有リポジトリに反映するまでの流れを見てきましたが,逆に,他人がリモートリポジトリに登録した変更を取り込むにはどうしたら良いのでしょうか。

ここで登場するコマンドが

git pull

です。

Gitの醍醐味は複数人での共同開発が容易にできること。pullすることで,リモートリポジトリの変更内容がローカルリポジトリのブランチに反映されます。

さて,ブランチとは何でしょうか。ブランチとは,Git管理下にあるファイルの変更履歴を,分岐して記録していくためのGitの機能です。

通常,git initした直後は,すべてのファイルが「masterブランチ」と呼ばれるブランチ上に存在します。ここから開発の用途に合わせて,たとえば「developブランチ」⁠designブランチ」⁠fix_hogeブランチ」などといった派生ブランチを切っていきます。

なぜブランチを分岐させる必要があるのかというと,複数の変更を同時進行で行いたい場合に片方の変更が,もう片方の変更とぶつかり合うことを防ぐためです(※変更が競合することをコンフリクトといいます)⁠

そして,切ったブランチはあとから本筋に統合することが可能です。この作業は git merge と呼びますが,ここはまた奥深いので,詳しい話は次回以降にしましょう。

話を戻します。

git pullコマンドを叩いた時に起こることは,リモートのブランチの状態をローカルのブランチにマージするということです。

つい先ほど省略しましたが,マージとはすなわち変更を取り込んで自身の状態に統合すること。実際は git pull コマンドの後にリモートブランチ名などを指定します。git pullすることにより,他者の変更を取り込み,その変更を起点に更新を続けていくことができるようになります。

さやみんとはまーのGitトーク

画像

さやみん:
今回からようやく具体的にGitを動かしていった感じがするね。
はまー:
Gitの特長の,変更の履歴を記録すること複数人での共同開発について具体的に見ることができて,やっとイメージが掴めてきたよ!
さやみん:
うん,Gitのコマンドはまだまだたくさんあるけど,今日紹介したものはGitでの開発を行っていくと何度も何度も使うコマンドだから,ここを押さえておくのはマストかな。
はまー:
ブランチの概念とかがちょっとわかりづらいなあ。Subversionでもブランチはあるけど,ちょっと考え方が違うみたい?
さやみん:
そうだね!Subversionにおけるブランチっていうのは,実態はディレクトリなんだよね。だけど,Gitの場合は,あくまで本筋のmasterブランチとは平行して存在するもので…パラレルワールド,みたいな。
はまー:
なるほど。他のコマンドもSubversionと同名で動きが違うものが出てきたよね。
さやみん:
そうそう,そのあたりは別のバージョン管理システムを使ってた人は,最初慣れないよね。私も混乱した(笑)⁠
はまー:
うーん,Git脳に切り替えてしばらくはやっていくよー!
パズルガールズ公式Twitter
http://twitter.com/puzzle_girls
パズルガールズ公式ブログ
http://ameblo.jp/puzzlegirls/

著者プロフィール

堤沙也(つつみさや)

早稲田大学政治経済学部卒業。ハックガールズ・パズルガールズでの活動を経て,都内のWebサービス全般を扱う企業にてWebアプリケーションやスマートフォンアプリの設計・開発を担当。主に扱っている言語は,Ruby,Python,PHPなど。


濱ヶ崎美季(はまがさきみき)

立命館大学国際関係学部卒業後,大手外資系SIer企業に入社。ハックガールズ・パズルガールズ・クエスチョンでの活動を経て,現在は株式会社SCRAPのIT・広報担当として勤務。最近は編集部上がりの厳格な先輩(コンパイラ)の下で日本語の文法と格闘中。

Twitter:@HUMMER_Q

コメント

コメントの記入