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?

More than 3 years have passed since last update.

[Git] 親ブランチをrebaseしたために子ブランチのコミット履歴がおかしくなって統合ブランチにマージできなくなってしまった場合の対処方法

Last updated at Posted at 2021-05-31

事例

当初、こんな感じのブランチ構成とツリーになっているとします。

main
┃ [コミットX]
┣ task-1
┃    ┣ task-2

トラブルが発生する流れ(例):

1.task-1をmainにマージする際に、mainの最新コミットにrebaseしてからマージした。
2.task-2をmainにマージしようとしたら、コミット履歴がおかしくなっていて、最新mainと複雑なコンフリクトが発生!

main
┃ [task-1を最新mainにrebaseしてマージ]
┃ [コミットX]
┣ 
┃    ┣ task-2 →コミット履歴がおかしくなって最新mainにrebaseもマージもできない!

こんなケースで、マージできなくなって困った時の対処方法です。
アジャイル開発で、一つの機能を複数人で作り込んでいく場合などはありがちなトラブルかと思います。

対処手順

1.最新のmainブランチを取得する。

git fetch
git checkout main
git reset --hard origin/main

2."task-2"ブランチの名前を"task-2-back"に変更して退避する。

git branch -m task-2 task-2-back

3."task-2"ブランチをmainブランチから切り直す。

(カレントブランチが"main"の前提で)
git checkout -b task-2

4."task-2-back"ブランチの対象コミットをcherry-pickする。

コミットが一つの場合/複数の場合、コミットをまとめたい場合、cherry-pickでコンフリクトした場合、いろいろあるかと思いますが、こちらの解説記事がとても分かりやすいと思います。
git cherry-pickを完全マスター!特定コミットのみを取り込む方法 - SAMURAI ENGINEER Blog

5.リモートにforce pushする。

(カレントブランチが"task-2"の前提で)
git push -f origin HEAD

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?