やりたいこと
書いたコードをプルリクエストでレビューしてもらうとコード差分にインラインで指摘を書いてもらえて捗るが、そのためには
- デフォルトブランチから分岐した feature ブランチに作業内容をコミット
- feature ブランチからデフォルトブランチへのプルリクエストをつくる
とする必要があり普段はそうしていました。しかし新規リポジトリを作ったときに気を抜いていたため
- リポジトリを新規作成して最初のコミットからコードを入れてしまった
- 親コミットがないので差分として見れない
- 最初の作業もプルリクエストでレビューしてもらいたい
- featureブランチで作業してなかった
となってその対処を考えました。実際には「空コミット上にリベース」の手順を採用。
手順の前提
- デフォルトブランチ名: master
- プルリクエストのマージ元ブランチ名: feat-XX
- リモート名: origin
- master ブランチを checkout している
(案1) 空コミット上にリベース
手順
-
git checkout -b feat-XX
(変更を feat-XX ブランチに退避) -
git branch -d master
(master ブランチを削除) -
git checkout --orphan master
(親コミットなしのブランチを作成してチェックアウト) -
git reset --hard
(インデックスをクリア) -
git commit --allow-empty
(空コミットを作成) -
git checkout feat-XX
(変更を退避させていたブランチをチェックアウト) -
git rebase master
(空コミット上にリベース) -
git push origin feat-XX
(リベースしたものをプッシュ) -
git checkout master
(空コミットのみの master ブランチをチェックアウト) -
git push origin master --force
(プッシュ) - feat-XX から master へのプルリクエストを作る
Pros
- レビュー対象のコミット単位を維持できる
Cons
- master の rewrite が必要
(案2) 全消し
手順
- ソースツリー上のファイルを全て消す
-
git commit -a
(空のソースツリーをコミット) -
git push origin master
(空になったものをプッシュ) -
git checkout -b feat-XX
(ブランチ作成) -
git revert HEAD
(空にしたものを巻き戻してコミット) -
git push origin feat-XX
(プッシュ) - feat-XX から master へのプルリクエストを作る
Pros
- master の rewrite が不要
Cons
- レビュー対象が1コミットになってしまう
- 後から見たときに何のために revert したのかわかりにくい