🔰はじめての方へ

【GitHub】複数ブランチを同時に作業しても大丈夫? |変更が消える心配を解消する

Github
記事内に広告が含まれています。
スポンサーリンク

はじめに

GitHubでブランチを使って開発していると

複数の作業を別のブランチを切って作業したい!

という場面がでてきますよね。

私は最初、何も考えずにメインから複数のブランチを切って作業していました。

ですが、片方をマージした際に気づきました。

「作業したファイルがごちゃまぜになった!?」

「さっきマージした作業はどこいった?」

ごちゃごちゃな状況になってしまいました。

その後から、複雑なことをせずに安定して作業するために、ブランチは1つずつ切るようにして、プルリク後にマージしてもらうまで待つようにしていました。

が、それじゃ全然作業が進まないのです。

今回はそれについて勉強したことを解説していこうと思います。

結論から言うと、

  • 同時に複数ブランチで作業しても、作業方法を理解していれば問題ない
  • 先にマージした変更が消えることはない

ということです。

実際にあった状況の整理

こんなケースがありました。

  • ブランチ #577:サイトのマイページを作成する作業
  • ブランチ #590:サイトのトップページを編集する作業

どちらもdevelop(またはmain)ブランチから切っています

#577の作業が先に終わったので、developにマージしました。
この時点で #590 にはまだ #577 の変更が入っていません

developに #577 の内容が入っている状態で #590 をマージしたら、
#577 の変更が上書きされて消える?のではないかという心配が生じました。

ですが実際は消えません!

なぜ変更は消えないのか

Gitのマージは「差分(diff)」で動いています。

#577がすでにdevelopにマージされた状態で、
#590をdevelopにマージする時、Gitは以下のように判断します。

今回のケースだと、
 ブランチ#577(マイページの作業) と #590(トップページの作業) はそれぞれ別のファイルで作業しています。

2つのブランチで異なるファイルを触っている場合、

  • #590が変更したファイル → #590の変更を適用する
  • #590が触っていないファイル → 何もしない(developの状態=#577の変更がそのまま残る

→ 577の変更も590の変更も両方入っている状態になる!

つまり、#577で変えたファイルを590が触っていなければ、#577の変更は完全にそのまま残ります。

注意が必要なケース:コンフリクト(競合)

↑のケースは2つのブランチが別のファイルを触っている場合の話です。

ただし、#577と#590で同じファイルの同じ箇所を編集した場合は「コンフリクト」が発生します。

Gitから

「どちらの変更を採用するか、自分で選んでね」

というメッセージが届きます。

577の変更が勝手に消されるのではなく、両方の変更を見比べて、正しい形に統合することができます。

おすすめの作業フロー

安全に並行作業するために、以下のフローをおすすめします。

1. ブランチを切る

# 577を切る↓

git checkout develop

git checkout -b 577-guide-page

# 590を切る(577と並行してOK)↓

git checkout develop

git checkout -b 590-new-feature

2. それぞれ作業する

各ブランチで普通に作業・コミットします。

3. 577が完了 → developにマージ

577のPRを作成してdevelopにマージします。

4. 590のマージ前にdevelopの最新を取り込む

ここがポイントです。

590をマージする前に、577の変更が入った最新のdevelopを590に取り込みます。

//# 590ブランチにいる状態で

git checkout 590-new-feature

git merge develop

もしコンフリクトがあれば、この時点で解消できます。事前に解消しておくことで、PRのマージがスムーズになります。

5. 590をdevelopにマージ

コンフリクトも解消済みなので、安心してマージできます。

まとめ

  • 先にマージした変更が消える? → 消えない。Gitは差分で管理している
  • 同じファイルを編集したら? → コンフリクトが起きるが、両方の変更を見比べて統合できる
  • 並行作業は避けるべき? → いいえ。むしろブランチの本来の使い方

ブランチは「安全に並行作業するための仕組み」です。

怖がらずにどんどん活用しましょう!

大事なのは、後からマージするブランチで

マージ前にdevelopの最新を取り込む

こと。

これだけ意識すれば、安心して複数の作業を同時に進められます。