Git初心者必見!最低限これは覚えておこう
SubversionやMercurialなど、プログラムの開発で様々なバージョン管理を使用していると思います。
その中で今回は Git に焦点を当てて、初心者でもGitが使えるようになりましょう。
はじめに
今回の記事は Git初心者 を対象としています。
Gitを既に使用していて1ステップ上を目指したい方はこちらの記事をどうぞ
基礎知識
コマンド説明を始める前に、各用語についての解説をしていきます。
分かりやすいように可能な限りイメージにしていきます。
リポジトリ
プログラムやファイルを蓄積しておくための、貯蔵庫(データベース)のような場所 がリポジトリです。
Gitでは ローカルリポジトリ と リモートリポジトリ の2種類があります。
ローカルリポジトリ
現在作業をしているリポジトリを ローカルリポジトリ と言います。
分かりやすく言うと 作業しているPCのGit環境リポジトリ の事です。
作業領域であるワーキングツリーというものを伴っています。
リモートリポジトリ
ローカルリポジトリに対して、外部にあるリポジトリを リモートリポジトリ と言います。
ローカルリポジトリを通じて操作するものであり、ローカルリポジトリの参照先として設定されます。
複数人で作業する場合、このリモートリポジトリが全員の共有リポジトリとなります。
ワーキングツリー
リポジトリから取り出したファイルがローカルリポジトリに配置され、ユーザーが作業する場所が ワーキングツリー です。
バージョン管理をしていくと、履歴が木のようになっていく様子から ツリー という表現が来ています。
また、この後出てくる ブランチ などの表現の由来でもあります。
ブランチ
ブランチ とは、履歴と流れを保存していくものです。
「枝」という意味のブランチですが、ローカル・リモート・リモートトラッキングの3つが存在します。
そのため、どのブランチを操作しているのかを意識するのが大事です。
ローカルブランチ
ローカルリポジトリで管理されるブランチを ローカルブランチ と言います。
リポジトリを作成すると自動的に master ブランチが作成されます。
リモートブランチ
リモートリポジトリにあるブランチを リモートブランチ と言います。
これは同じリモートリポジトリを利用するすべての人に見えるブランチです。
リモートトラッキングブランチ
リモートブランチをローカルリポジトリでトラッキングするためのブランチを リモートトラッキングブランチ と言います。
リモートブランチを参照するのに利用します。
チェックアウト
リポジトリにあるブランチをワーキングツリーに展開することを チェックアウト と言います。
ブランチだけではなく、タグやコミット、リモートリポジトリのブランチもチェックアウトができます。
これは特定コミットの動作確認をする場合などに利用できます。
タグ
コミットに対して特定の名前を付けることができることを タグ と言います。
リリースやバージョンなどを付けることができます。
コミット
ファイルの変更をリポジトリに登録することを コミット と言います。
コミットをするためにはまず 一時領域(インデックス) に追加(add)し、その一時領域にあるものをリポジトリにコミットします。
また、コミットには内容を記載するための コミットメッセージ が必要です。
コミットハッシュ値(リビジョン)
コミットをしていくと、各コミットごとにハッシュ値が生成され、これがリビジョンとして使用されます。
このコミットハッシュ値を指定して操作することができますが HEAD や ORIG_HEAD など、特定の場所を意味する名前もあります。
基本的なGitコマンド
最低限の単語の説明が終わったところで、基本的なコマンドを紹介していきます。
リポジトリの作成 / git init
git init は Gitリポジトリを作成 します。
1 2 3 |
$ git init |
Gitを始めるスタート地点です。
基本的に実行後は .git フォルダができます。
ファイルをインデックスに登録する / git add
git add は Gitリポジトリへのコミット前にインデックスに登録・更新する ためのコマンドです。
1 2 3 |
$ git add main.c |
ポイントは git add した時点の状態がインデックスに登録される ということです。
そのため git add した後に同じファイルの内容を変更すると、その部分はインデックスに登録されていませんので、再度追加する必要があります。
ファイルだけでなく、ディレクトリ単位でも追加することができます。
Gitの管理外にしたいファイル(APIキーやセキュリティSaltなどが書いてあるファイルなど)は .gitignore ファイルで指定することで、対象外にすることができます。
ファイルの差分を出力する / git diff
git diff は ファイルの差分を確認する ために使用します。
1 2 3 |
$ git diff |
差分はブランチやインデックス、ワーキングツリー間の差分を確認できます。
また、ファイルを指定することで、そのファイルだけでの差分も取得可能です。
変更をローカルリポジトリにコミット / git commit
git commit は インデックスに登録されているファイルの変更を、リポジトリにコミットする ためのコマンドです。
1 2 3 |
$ git commit -m "Add New Image Files." |
コミットには コミットメッセージ を入れることが必須です。
(-m で指定しなかった場合、入力画面が開きます)
コミットメッセージは自由に書くことができますが、書き方を統一しておくと、後で有用となることが多いです。
1 2 3 4 5 6 7 8 |
# 1行目はコミット内容を一言で表す内容を記述 対応画像形式を追加 # 1行空白を開け、3行目から具体的な内容を記載 png, gifをアップロード可能にする。 (jpg以外の要望があったため) |
複数の人と開発する時に利用するコマンド
Gitは複数人や様々な機能を使用することで、効率的な開発が実現できます。
ここでは多人数開発の際に使用するコマンドの解説を書いていきます。
リモートリポジトリをローカルにコピーする / git clone
git clone は 指定したリモートリポジトリのコピーをローカルにコピーしてくる ためのコマンドです。
1 2 3 4 5 |
$ git clone git://example.com/project.git Cloning into project... |
既に開発が開始しており、リモートリポジトリが既に存在する場合などに使用します。
clone はデフォルトでHEADで指定されているリモートブランチを取得しますが、ブランチを指定したり、名前を指定することが可能です。
リモートリポジトリの管理および更新を行う / git remote
git remote は リモートリポジトリの管理・更新をする ためのコマンドです。
1 2 3 |
$ git remote add branch git://example.com/branch.git |
git init を実行した後は、リモートリポジトリの設定がされていません。
また、途中でリモートリポジトリのURLが変わることもあります。
そういう時に使用するコマンドになります。
あまり知られていないかもしれませんが、リモートリポジトリは複数指定することができ、グループ管理をすることも出来ます。
ブランチをマージする / git merge
git merge は ブランチとブランチをマージ(統合)する ためのコマンドです。
1 2 3 |
$ git merge master |
git merge は ローカルリポジトリでのみ使用することができ、一つのコミットとして扱われます。
このマージは失敗(コンフリクト)することがあります。
ブランチの分岐後に同一ファイルが操作された場合、コンフリクトが発生し、当該箇所にコンフリクトマーカーが挿入されます。
(<<<<<<< や >>>>>> などです)
コンフリクトを解消させ git add と git commit をすれば、マージが完了します。
コンフリクトの解消方法は状況によって変わり、難易度が高いですが、これを避けてはGitが使えませんので、少しずつ覚えていきましょう。
リモートリポジトリにローカルリポジトリのデータを送信する / git push
git push は 登録してあるリモートリポジトリにローカルリポジトリのデータを送信する ためのコマンドです。
1 2 3 |
$ git push origin master |
端的に言えば ローカルリポジトリにコミットしたものをリモートリポジトリへ送信する 場合などで使用します。
また git push は必ず成功するわけではありませんが、失敗するパターンは、大きく分けて2つです。
- どちらかにしかないコミットがある
- リモートブランチがチェックアウトされている
ローカルリポジトリにリモートリポジトリのデータを反映する / git pull
git pull は 登録してあるリモートリポジトリからローカルリポジトリにデータを反映する ためのコマンドです。
1 2 3 |
$ git pull origin master |
git pull は git fetch を実行し、その情報をもとに git merge を行っています。
このコマンドも必ず成功するわけではないですが、エラーは大体下記の2つです・
- 変更したファイルがコミットされていない
- ファイルの重複エラー
ブランチをチェックアウトする / git checkout
git checkout は リポジトリからブランチのデータをインデックスとワーキングツリーに展開する ためのコマンドです。
1 2 3 |
$ git checkout master |
コミットしていない変更がある時でもチェックアウトはできますが、チェックアウト崎のブランチで変更が加えられていた場合はエラーになります。
また、ファイル単位でチェックアウトすることも可能です。
タグをつける / git tag
git tag は 各コミットにタグを付ける ためのコマンドです。
1 2 3 |
$ git tag ver_1_0_0 HEAD~ |
タグはローカルリポジトリだけでなく、リモートリポジトリへ登録できます。
リモートリポジトリからリポジトリデータを取得する / git fetch
git fetch は リモートブランチから情報を取得する ためのコマンドです。
1 2 3 |
$ git fetch origin master |
このコマンドはリモートリポジトリのコミットがローカルリポジトリに取り込まれただけなので、ワーキングツリーやインデックスに影響を与えません。
そのため、ローカルブランチに反映せずにリモートリポジトリにあるブランチやタグの情報を確認することができます。
さいごに
初めてGitに触れられる方はかなり情報量が多いですが、端的に分かりやすくするため、イメージと簡単な説明だけで解説してみました。
各コマンドは様々なオプションがあり、できることの幅が広がります。
このページの内容を理解できた方は下記の公式ドキュメントより、調べてみてください。
- おすすめ記事
POPULAR
のえる
Full-stack Developer