0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

branchを数珠繋ぎにした時にmainにmergeする方法

Posted at

初めに

チーム開発では、機能A → 機能B → 機能C と、複数のブランチが“数珠つなぎ”で派生して進んでいくケースがよくあります。
しかし、私はまだエンジニア経験 2 ヶ月目で、日々Gitの運用方法に悩みながら開発しています。

・Bをマージする前にAをマージした方がいいのか
・squash mergeのときはどうすればいいのか
・rebaseするとforce pushが必要になってしまう(NGな現場も多い)

本記事では、実際に実験を行いながら “数珠つなぎブランチを main に正しく merge する方法” を整理しました!

未経験エンジニアの方たちの助けになればと思います。

ベースブランチの選択

baseのセレクトボックスをmainからbranchAに変更することでベースブランチにすることができます。

スクリーンショット 2025-12-06 13.29.58.png

mainへのマージ方法

実際にマージ作業を行うとどのような挙動になるか、実際に試しながら調べてみました。

branchAからマージする方法

パターン1

  1. branchAをマージ後、branchAを削除
  2. branchBをマージ

branchBに「Base automatically changed from branchA to main」と表示され、
ベースブランチがmainになります。
そのままbranchBをマージすればmainに無事マージされます。

スクリーンショット 2025-12-06 13.16.56.png

パターン2

  1. branchAを修正(branchBと干渉する箇所)
  2. branchAをマージ後、 branchAを削除
  3. branchBをマージ

branchAの時にbranchBに干渉する箇所を編集したところ、branchB上でコンフリクトが発生しました。
またこの時ベースブランチはパターン1と同じくmainになります。
スクリーンショット 2025-12-06 13.55.28.png

この場合、コンフリクト解消のために、ローカル上でmainをbranchBにマージしてからもう一度pushする必要があります。
下記がコンフリクトを解消する手順です。

git switch main
git pull
git switch branchB
git merge main (この時コンフリクト発生、解消作業が必要)
git push origin head

コンフリクトが解消されれば、無事mainにマージすることが可能です。
スクリーンショット 2025-12-06 14.02.04.png

パターン3(squash merge)

パターン1と同じ手順でsquash mergeの場合

  1. branchAをマージ後、branchAを削除
  2. branchBをマージ

squash mergeだとコミット履歴が変わるため、branchBにbranchAのコミット履歴が付随するようになります。
また、branchAを編集しようがしまいが、必ずコンフリクトが発生するみたいです。
スクリーンショット 2025-12-06 14.26.49.png

branchAをマージ後、削除した時のbranchBの状況
スクリーンショット 2025-12-06 14.27.27.png

コンフリクト解消のために、パターン2と同じ手順を実施します。
すると無事mainにマージできるようになります。

スクリーンショット 2025-12-06 14.35.56.png

branchBからマージする方法

branchBからマージする方法もあったため、こちらも試していきます。

パターン4

  1. branchAを修正
  2. branchBに発生したコンフリクト解消
  3. branchBをマージ
  4. branchAをマージ

branchAを編集した場合、下記のようにコンフリクトが発生します。
スクリーンショット 2025-12-06 14.48.30.png

このコンフリクトを解消するためには以下のコマンドを実行していきます。

git switch branchB
git merge branchA(コンフリクト解消作業)
git push origin head

すると、branchBのコンフリクトが解消されるため、マージができるようになります。
スクリーンショット 2025-12-06 14.51.13.png

また、branchAが下記のようにbranchBのコミット履歴がつくようになり、無事mainにマージすることができるようになります。
スクリーンショット 2025-12-06 14.56.25.png

このパターンのやり方はsquash mergeでも同じようにmainにマージすることができます!
branchBをsquash mergeするとbranchAでは以下のようになりmainにマージ可能
スクリーンショット 2025-12-06 15.09.16.png

終わりに

今回はbranchの数珠繋ぎを行った時にmainにマージする方法をいくつか試してみました。
初めてマージ作業を任されたときは、この方法で合っているだろうかと心配になりましたが、今回実験を行ったことで、githubの扱いに少し自信がついてきました。
同じくgithubの扱いに不安を抱える方に少しでも役立てればと思います!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?