Gitの実践的な使い方(1) リモートブランチとマージ

Gitで実践的に使うときにはブランチの嵐になになります。途中参加すると技術の云々に関わらずどのブランチを正とするかなど人間が決めている部分があるので確認事項多くなります。どのブランチに何をするのかというのを怠ると結構たいへんなので、そこはちゃんとした方がいいですよ。

リモートのブランチを確認する

最初にリモートのブランチを確認します。リモートのブランチと自分のブランチが一致していたらそれでOKですが、リモートに見知らぬブランチがたくさんある場合は、それが何の開発をしているのか確認しておいた方がよいでしょう。
正確な意味でのリモートにあるブランチは「git branch -r」で見ることができません。これはあくまでもローカルにある追跡ブランチを表示できるコマンドなので、最新のリモートブランチを確認する際は最初にfetchしておかないとダメです。

git fetch
git branch -r
origin/master
origin/BRANCH1

ローカルブランチと両方を見るには-aにします。

git fetch
git branch -a
* master
  remotes/origin/master
  remotes/origin/BRANCH1

これらをやっておくと他の開発がどんな風になっているのかがわかります。

自分の開発をはじめる

まずはどのブランチから派生するのかを確認しましょう。そのブランチのHEADから新しい自分用の開発ブランチを作成します。ここではBRANCH1から派生します。

git checkout BRANCH1
git fetch origin BRANCH1
git merge FETCH_HEAD HEAD
git branch BRANCH2
git checkout BRANCH2

ここから開発をはじめます。

リモートブランチとの差分をみる

ときおり手に負えないぐらいの量のコンフリクトが生じます。意味がわかればよいのですが、意味の解析に時間がかかったりするので、リモードブランチとの差分を予め見ておくほうがよいです。

git fetch origin BRANCH1
git diff --name-only FETCH_HEAD HEAD

これで見知らぬファイルがやまほどコンフリクトしそうな場合は(私的には)、自分の開発をいったん退避させてリモートブランチの最新で強制的に上書きして、自分の開発を手作業で再マージというのがいちばん楽かなと思っています。自分の作業は意味がわかっているので非常に楽かと。

git reset --hard FETCH_HEAD

ここから自分の修正したぶんを反映するとうまいことpushできるようになります。
※開発スピードがあまりにも早い場合は要注意です。

ブランチを削除する

ブランチ削除する際は-dでやります。アラートとか出ないので要注意。

git branch -d BRANCH1
Deleted branch BRANCH1 (was f16116a).
Last update: 2017.09.10 (日)