git rebase でうまくいかず、苦労した

git, 開発conflict, git, rebase

git rebaseがうまくいかない?

今日は、遅くまで作業をしていて疲れていたのか、単純なところでつまずいていたのではないかと少し休んでから、思うようになりました。
git rebase 時にコンフリクトを起こしてしまい、とりあえず、無理やり解決してしまいました。特に問題はないですが、あまり良くない解決方法でした。

どのような状況で発生したのか?

featureブランチで、作業を行っており、一つの区切りの良い開発まで進んだので、developブランチとのマージリクエストを投げていました。
マージしてもらうまでの、空き時間に別のfeatureブランチで別の開発を行っていました。
こちらもある程度開発が進んできたので、先程の開発を合わせてテストを死体状況になりました。既にマージが済んでいたので、developブランチを最新版にするためにpullしてきました。
問題なく進みました。続いて、開発中のブランチにチェックアウトを行い、rebaseを実行。ここで、コンフリクト発生!とりあえず、git statusしてファイルを確認。ファイルを開いてコンフリクトの解決を行いました。この段階で動くかテストを行ったところ、エラーが表示されました。

焦ってしまいました

作業した部分の大部分がなくなってる!と焦り、とりあえず、戻すぞと思い,

 git rebase --abort

を実行。再度やってみましたが、同じ結果になってしまいました。いろいろ考えてみましたが、だめでした。

この段階で気づけばよかったのですが…

このブランチで開発していたコミットがたくさんあったので、一つにまとめるぞと思い,

git rebase -i <ハッシュ値>

を実行。再度

git rebase develop

を実行。すんなり、解決しました。今思えば、普段ならここでおかしいと気づくのですが、今日は、かなり疲れていたので、気づかずに帰ってきました。

気づきました!

家に帰ってきて、なにかブログに書くネタないかなと考えていた時に、気づきました。その時 git rebase で行っていることをよく考えていませんでした。
git rebase は、developブランチの最新版を取り込んできて、一つ一つfeatureブランチのコミットをcherry-pickで取ってきていることを思い出しました。最初のコミットでコンフリクトを解決したあとに,

git rebase --continue

を実行することで、次のコミットをcherry-pickするようになります。

git rebase -i <ハッシュ値>

で一つのコンフリクトだけでうまく行ったということは、最初のコミットでコンフリクトを起こしただけで、コンティニューすると次は、コンフリクト起こさずrebaseができたことでしょう。
少し冷静になって考えてみたいものでした。