LoginSignup
18
6

More than 1 year has passed since last update.

rebase したらちょっと前に入れた修正が巻き戻ってた

Last updated at Posted at 2022-06-25

先に結論(という名の戒め)

  • こまめにローカルブランチとリモートブランチを同期しましょう
  • 特に、PR/MR の suggested changes を適用した時は必ずその修正をローカルに反映しましょう
  • force push歴史の改変なのだということを強く意識しましょう

事の発端

〜とある MR1 のレビュー中〜

私「そろそろこの MR も終わりに近づいてきたなあ。他の人の MR がマージされて develop ブランチが先に進んだようだし、develop ブランチのコミットを取り込むか」

私「コミットの履歴は1本にしたいし、rebase でやろう。git fetch でリモートの状態を手元に取り込んで、git rebase origin/develop っと。」

私「お、コンフリクトした。いい感じに修正して・・・このままだと push で弾かれるから、git push origin branch1 -f でリモートに反映!」

私「@レビュワーのみなさま develop ブランチの修正を取り込み、コンフリクトを解消しました。ご確認お願いします :smile:

〜〜その後しばらくして〜〜
image.png
私「は・・・?」

私「色々と戻ってる・・・???そんなはずは・・・」

私(コードを確認)

私「ほんとに戻っちゃってる・・・・:cry: なんで・・・???」

時系列の整理

  1. 私、MR を出す
  2. いくつか修正コメントをいただいたので修正して push
  3. suggested change に書くには多すぎる量の修正提案があったので、レビュワーが修正案を別の MR として作成
    • このとき、作成いただいた MR のマージ先ブランチは元の MR の source branch
  4. レビュワーが作成した MR をマージ
  5. この間に、別のメンバーが進めていた MR が develop ブランチにマージされる
  6. git fetch して最新の状態をローカルに取得後、git rebase origin/develop で別メンバーの修正を自分のブランチに取り込み
  7. コンフリクトしていたのでローカルで修正
  8. git push -f でリモートに反映
  9. レビュワーからのコメントで巻き戻りに気づく

何が悪かったのか??

やらかしの原因は、ここ。

↓ ↓ ↓ ↓ ↓ ↓ ↓
git fetch して最新の状態をローカルに取得後、git rebase origin/develop でマージされた修正を自分のブランチに取り込み
↑ ↑ ↑ ↑ ↑ ↑ ↑

もうちょっと詳しく

時系列 1〜4 の時点で、私のローカルの作業ブランチは MR の source branch(= ローカルの作業ブランチをリモートに push したもの)よりも遅れている状態になっていました。

その後、時系列 5〜7 で MR の source branch(= ローカルの作業ブランチをリモートに push したもの)に入った修正をローカルの作業ブランチに取り込まないまま、作業ブランチを force push してしまった ために、MR 上で修正が巻き戻った状態になってしまいました。

本当はどうすべきだった?

時系列 4 の後すぐに、MR の source branch の修正をローカルの作業ブランチに取り込むべきでした。

結論という名の戒め、再掲

  • こまめにローカルブランチとリモートブランチを同期しましょう
  • 特に、PR/MR の suggested changes を適用した時は必ずその修正をローカルに反映しましょう
  • force push歴史の改変なのだということを強く意識しましょう
    • force push に慣れちゃうとなんかあったら脳死で -f つけちゃうの、ほんと良くない
  1. 現在関わっているプロジェクトでは GitLab を利用しています。MR = Merge Request です。GitHub の PR(Pull Request)とほぼ同じです。

18
6
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
18
6