Gitのこれだけ知ってたら何とかなる

突然仕事でGit(Git Hub)使うぞ!と言われたときにひとまず開発を行うために知っておいたほうがいい内容。

基礎的なお話

Gitというのはソースのバージョン管理ツール。
リモートと呼ばれるサーバからソースを取得して、ソースの変更をコミットしてプッシュすることで勝手にバージョンを管理してくれる開発者にとって強力な補助ツール。
ここでは複雑なことは一切省いて、開発を行う上で知っておくべき最低限の知識を詰め込んでます。
そのため、リモートやローカルリポジトリ云々などの情報は省略しています。

GitHubを使った開発の大まかな流れ

  1. リモートからリポジトリを取得
  2. 自分専用の開発ブランチを作成
  3. ソースの変更
  4. 変更を追加・コミット(ソースの変更を開発ブランチに適用する)
  5. 自分専用の開発ブランチをリモートへプッシュ
  6. プルリクエストを作り、元のブランチへマージ
  7. 最新ソースをプルして、2.へ戻り開発を続ける

大体、こんな感じです。
実際は3,4を何回か繰り返し、6.で他の人にレビューしてもらってOKが出てからマージするのですが、このあたりのルールは現場ごとにルールがあるので、わかる人に聞いてみること。
当サイトでは1~5までをまとめてます。

PCをある程度使い慣れていて、ソフトウェア開発を初めてやりました。。。
みたいな人が良くする間違いとして、自分のPCでソースの変更を保存したらサーバのソースが変更されるということはなく、変更をリポジトリに反映させるいくつかの手間が必要になります。(詳細は以降を読み進めてください)

大事なこととして、クローンしてきた環境1つに対してカレントとなるブランチは1つ。
別のブランチのソースを同時に見たいときは、別のディレクトリ(フォルダ)にクローンを行うのが無難。
(同時に見たい!ということでなければカレントブランチを切り替えて確認する)

用語

最低限の説明です。

リポジトリ:
ソースを管理する一番大きな塊。
プロジェクトの単位でリポジトリが分かれていることが多い。
GitはCloneすることで、自分のローカル環境にリポジトリのクローン(コピー)を持つ。

リモート:
リポジトリを管理しているサーバのこと。
Git HubならGit Hubの事を指していると思って間違いではない。

ローカル:
自分のPCのこと。
ローカルのリポジトリにGitのコマンドを使って変更を行いリモートに反映する。

マスター(master):
メインに開発を行うブランチのこと。

ブランチ:
マスターからとは限らないが、枝分かれしたソースの集合体。
ブランチからブランチを作ったりすることもあるが、基礎の基礎ではマスターからブランチをするのが基本となる。

カレント(ブランチ):
本サイトでカレントと言われたら、現在選択されているブランチの事を指している。
Gitのコマンドは特別な指定をしない限りカレントのブランチに対して何かを行うこととなる。

1.リモートからリポジトリ(ソース群)を取得

git clone <リポジトリから取得したURL>

Git HubからリポジトリのURLを取得する方法は以下を参照

リポジトリからmasterのソースのすべてを落としてくるコマンドと思っておけばいい。

正確に把握したいなら文字通りリモートのリポジトリのクローンを作っている。「え?ブランチのソースはどこにあるの?」と疑問に思う人は、ブランチをチェックアウトすることで確認することが可能。

なお、原因不明だけどGitの何かの操作でどうもうまくいない!。といったときはGit Cloneからやり直す。ということを覚えておくと無駄な試行錯誤の時間が減らせる。

ブランチの確認

git branch

現在のカレントブランチの確認や、ローカルのリポジトリに存在するブランチを見ることができる。

リモートの最新ソースを取得

git pull

カレントブランチの最新ソースをリモートから取得する。

ついでにリポジトリの最新の情報も取得してくれる。
ただし、カレントブランチ以外はソースは更新されず、リモートで最新ソースが変化してますよ。といった情報を得るのみ。
カレント以外のブランチの更新を行いたい場合は、難しいコマンドを覚える必要があるのでカレントブランチを切り替えてプルすればいい。

ブランチの切り替え

git checkout <ブランチ名>

カレントブランチを切り替える。
「git branch」で確認した結果、ローカルリポジトリに存在しないがリモートに存在するブランチへの切り替えも可能だが、ローカルのリポジトリが存在を取得しておらずエラーになることがあるので、その場合は「git pull」を先に実施する。

2. 自分専用の開発ブランチを作成

git checkout -b <ブランチ名>

カレントブランチから分岐してブランチを作成する。
意識してリモートにプッシュしない限り、サーバの状態を汚したりすることはないので気にしないでガンガン実行してみるべき。

3. ソースの変更

割愛。テキストエディタでもVisual Studio(Code)でも何でもいいので、ソースの修正を行う。

4. 変更を追加・コミット(ソースの変更を開発ブランチに適用する)

git status
git add <変更するファイル or ディレクトリ1> <変更するファイル or ディレクトリ2>...
git commit -m "<ログに残す 変更内容>"

「git status」は追加・変更・削除したファイルやディレクトリの確認を行うためのコマンド。
gitでは空のディレクトリの追加は行えず、必ずファイルの追加を伴う必要があるが、リポジトリの管理下にないディレクトリの中のファイルは「git status」では確認できないので、まずはディレクトリの追加を行う必要がある。

「git add」は追加・変更・削除したファイルやディレクトリの中からブランチへ反映させるための準備を行うコマンド。
準備なので、このコマンドでブランチに反映されるわけではない。

「git commit」はgit addしたファイルやディレクトリをカレントブランチへ反映するコマンド。
ここでやっとローカルのリポジトリに対してファイルの修正を反映できたことになる。

なお、よくある失敗として「git add」をした後にファイル変更の保存を忘れていて、コミットした内容が古かったり、新しいファイルを追加したのに「git add」を忘れてコミットしてしまう。など。

5. 自分専用の開発ブランチをリモートへプッシュ

git push

正確にはカレントブランチをリモートのリポジトリへ反映させるコマンド。
なお、リモートにブランチが存在しない場合は以下のようなエラーが表示される。
(新しいブランチを作るごとの最初の一回のみ)

fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use

git push –set-upstream origin <自分専用ブランチ>

リモートのリポジトリに新しいブランチを作りたい場合は、「git push –set-upstream origin <自分専用ブランチ>」のコマンドをコピペして実行すればよい。
以降は「git push」のみで大丈夫。