今回は、Webエンジニアとして実務経験2年程度の筆者が、最低限これだけ覚えておけばチーム開発やり過ごせるぞーというGit知識をお伝えする記事にしようと思います。
最初に断っておくと、とりあえずチームに迷惑かけない程度の知識なので、追々ちゃんと勉強していきましょう。

「チーム開発初めてだけど、Git扱えるか不安…」
「とりあえず最低限のGitを知りたい」
などお考えの方には参考になるかと思います。
それでは、早速みていきましょう!
Gitとは
Gitは、分散型バージョン管理システムの一種であり、ソフトウェア開発においてコードの変更履歴を管理するために使用されます。
つまり、プログラムのどの部分がいつ、誰によって変更されたのかを追跡し、必要に応じて過去の状態に戻したり、複数の開発者が同時に作業することを容易にします。
例えてみると、ドラゴンクエストのセーブポイントみたいなものですね。一区切りついたらセーブを書いておいて、バグったりしたら戻せるよみたいに考えておけばOKです。
ちなみに、セーブされたデータはリポジトリというソースコードの保管所のようなところに保管されます。この保管所は、基本的にはGithubかBitbucketというサービスを使うことになるかと思います。
チーム開発するときのイメージとしては以下のような感じです。

ブランチとは
ブランチというのは作業場のようなものだと思ってください。
ほとんどの場合、本番環境にはmainブランチかmasterブランチが適用されます。
ただ、開発を行う場合はmainブランチなどで開発を進めることはまずありません。
mainブランチから派生した別の作業場(ブランチ)を作って、そこで開発を進めることになります。開発が完了したら、十分に確認してから最終的にmainブランチなどに反映します。
例え話
ここで、例え話をしましょう。
例えば、学校で一枚の紙にとても大きな絵を描くというプロジェクトがあったとします。
クラスの生徒が役割分担せずに、一斉に一枚の絵に描き出したらどうなるでしょうか?
かなりカオスなことになりますよね。きっと
そこで、一枚の大きな紙を生徒数分だけ切り分けます。
この断片が作業ブランチです。
一人一人の生徒は自分に割り振られた部分だけを描きます。
そして、最終的に切り分けられた断片を繋げれば、大きな絵のプロジェクトが完成します。
この繋げることをGitではマージと言い、完成した大きな絵はmainブランチになります。
最低限のGitコマンド
それでは、このセクションから最低限のGitコマンドを見ていきます。
git status
これはGitコマンドの中でも最も基本的なコマンドで、Gitの状態を確認する際に使います。
git status
このコマンドでは以下のように現在のブランチと、まだステージングされていないファイルがあれば出力されます。

この場合は現在mainブランチにいることになります。
また、赤文字にハイライトしているところがステージングされていないファイルになります。
ステージングとは、変更に含めるファイルを選択し準備するプロセスです。これにより、分割して変更したりなどができるようになります。
この赤文字にハイライトされているファイルの中から、変更するファイルを選んで変更を確定します。この変更を確定することを「コミット」と呼びます。
git diff
git diff
コマンドは、ファイルの変更差分を確認するコマンドです。
git diff ファイルのパス
このコマンドにより、以下のような差分の確認を行うことができます。

git add
git add
コマンドは変更するファイルをステージングします。
git add ファイルのパス
ファイルがステージングされると、以下のようにchangs to be committedにファイルが追加されます。

git commit
git commit
コマンドは変更を確定します。
その際、コミットコメントをつけるのが通例です。
git commit -m "コミットコメント"
実行例は以下のようになります。

git push
git push
コマンドはリポジトリにソースコードを反映します。
git push リポジトリ名 ブランチ名
実行例は以下のようになります。

git log
git log
コマンドは過去のコミット履歴を確認することができます。
git log
出力例は以下です。

git branch
git branch
コマンドはブランチの一覧を表示できます。
git branch
以下は出力例です。

現在のブランチはハイライトされます。
git checkout
git checkout
コマンドはブランチを切り替えることができます。
git checkout ブランチ名
例えば、feature/TASK1に切り替える場合は以下のようになります。
git checkout feature/TASK1
さらに、ブランチを新しく作成する場合は-b
オプションを使って以下のように書きます。
git checkout -b feature/TASK4
こうすると、現在のブランチから派生してブランチを作成し、さらに作成したブランチに切り替えることができます。
git merge
git merge
コマンドは、マージ先のブランチにソースコードを統合することができます。
例えば、現在feature/TASK1ブランチで作業しているとして、これをmainブランチにマージすると、ソースコードとしては「mainブランチ + feature/TASK1ブランチ」という状態になります。
mainブランチにマージする場合は、mainブランチに切り替えて以下のコマンドを実行します。
git merge feature/TASK1
Gitの基本的な流れ
今作業ブランチで開発を行っているとして、リポジトリにプッシュする際は基本的に以下のような流れでプッシュします。
- Gitの状態を確認する(git status)
- 差分を確認する(git diff)
- 差分が問題なければ、ステージングする(git add)
- コメントをつけてコミットする(git commit)
- リポジトリにプッシュする(git push)
上記に加えて、必要に応じて適時git log
コマンドでコミット履歴を確認し、最終的にはmainブランチやdevelopブランチなどにマージする、という流れになると思います。
ちなみにGit運用に関しては、開発現場によって結構異なります。
有名なGit運用方法としては、「Git Flow」があります。筆者の経験上、このGit Flowをベースにしてアレンジしているところが多い印象です。
Git Flowに関しては以下の素晴らしい解説記事がすでにありますので、興味があれば見てみると良いと思います。
コンフリクトが起きたら
Gitではマージする際に、コンフリクトという現象が起きる可能性があります。
コンフリクトとは、他の人が作業した分と自分が作業した分で一部被ってしまっていて、ソースコードが競合してしまうことです。
この場合、自分のソースコードか他の人のソースコードかどちらかを採用しなければなりません。
解消方法がわからない場合は、慌てず騒がず、わかる人に相談するのが良いでしょう。
ちなみに、どういったコンフリクトが発生しているのか確認する方法は以下の記事で紹介しています。
こちらも併せて確認いただけると幸いです。
それでは、今日はここまで!
コメント