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ができたことでしょう。
少し冷静になって考えてみたいものでした。
ディスカッション
コメント一覧
まだ、コメントがありません