Git サーバー

[Git]プルリクエストを作り直す: ブランチ古い編

※本サイトはPR表記を含みます。

 

プルリクエストに対し、いざ開発環境でレビューする際に「ん?動かないんだが・・」というケースがあります。

原因は色々考えられますが、開発環境に不備が見当たらない場合、git logでブランチが古くなっていないかどうかも確かめてみましょう。

 

ブランチが古いと、マイグレーション含め、コードに大きな変更があった場合、整合性が取れず、上手く動かなくなってしまう可能性があります。

そうしたトラブルを未然に防ぐために、開発作業が終わるとプルリクエストを出す前に一度、ブランチを最新にしておくことが大事です。

 

プルリクエストを出す前のブランチを最新にしておく方法の過去記事です。

[Git]プルリク前に作業ブランチを最新にする方法[git rebase]

続きを見る

 

ここからは、すでに出したプルリクエストのブランチを最新にする方法です。

プルリクエストは必ずクローズさせる

すでに出したプルリクは必ずクローズさせるようにしましょう。なぜなら、ブランチを最新にする作業をすると、ほぼコミットハッシュ(ID)が全て作り直されるからです。

その場合、同じブランチに対してプッシュしようとするとGitHubリポジトリと整合性が取れなくなってしまい、悲惨な結末に。なので予めプルリクはクローズしましょう。

GitHubを利用してる前提なので、当該プルリクエストのクローズボタンをポチるだけなので省略します。

 

方法①: git rebase

git rebase を駆使して、ブランチを最新にしましょう。

既に一回出したブランチをベースにして対応する方法です。

 command
- git checkout master // masterへ切り替え
- git pull // masterを最新状態にする
-(masterの状態で動作確認しておく)
- git checkout hoge-branch // 作業ブランチへ
- git rebase master // 最新のmaster状態を取り込む
- (作業分の確認と開発環境で動作してるか確認)
- git branch -m hoge-branch-2 // クローズしたブランチ名のままだと、レビュー時に混乱するかもなのでナンバリングなどをしておく
- git push origin hoge-branch-2 // 新たにプッシュ
- プッシュしたブランチでPR作成

なお、途中で全然動かんやん、あかんやん、ってなった場合


方法②: git cherry-pick

git cherry-pick はコミット内容を取り込める(コードの変更をコミット単位で拾ってこれる)優れものです。

こちらのアプローチは、masterを最新にした後に新たなブランチを切り、作業内容を取り込んでいくようなイメージです。

 command
- git checkout hoge-branch // 作業ブランチ(プルリクをクローズしたと仮定)
- git log // cherry-pickするコミット番号を控える(テキストへコピペとかでも可)
- git checkout master
- git pull
- (masterの状態で動作確認しておく)
- git checkout -b hoge-branch-2 // masterブランチから新たな作業ブランチを切った
- git cherry-pick コミット番号 // コミット単位で作業履歴を取り込む
- (とりこむコミット単位で繰り返し cherry-pick 実行)
- 動作確認
- git push origin hoge-branch-2 // 新たにプッシュ
- プッシュしたブランチでPR作成

ちなみにコミットメッセージもやり直したい、コミット内容もやり直したいなどの場合

 command
git cherry-pick -n コミット番号

とすることで、コード変更のみを取り込むことが可能です。確認後、新たに行コミットするなり、コミットメッセージを変更するなりして、作業を進めましょう。

 

方法③: 結局ダメだった場合

どちらも試してみたけど、にっちもさっちもいかなかった場合は、思い切ってgit clone から作り直す方が早いのかも・・?

それはそれでためになる説あります。

-Git, サーバー
-