目的
- 二つのコミットを一つにまとめる方法を書く。
- 1回のコミットにしたかったが間違えて2つに分けてしまい、2つ目のコミットを間違えた場所からしてしまった時の対処法を書く。
前提条件
- pushを行い現在レビュー中にRebaseを行った二つのコミット(AコミットとBコミット)をまとめる時を想定する。
- 最初に行ったコミットをAコミットとし、Aコミットで修正したファイルをAファイルとする。
- 後に行ったコミットをBコミットとし、Bコミットで修正したファイルをBファイルとする。
- Aコミットのpush環境は残っておらず、現在はBコミットの環境のみがローカルに存在するものとする。
実施詳細
※確認コマンド実行の合間にコマンド$ git log
を実行すると良い
- fetchでレビュー中の情報を取得する
- Bコミットの環境にfetchでレビュー中のAコミットの環境を得る。
- コマンド
$ git fetch gerrit
を実行したがレビュー中に実施したRebaseの情報までは取得できなかった。(コミットIDを指定してcheckoutしようとしてもfatalと言われた→rebaseを行ったため、その情報がGerrit上にはあるがローカルになかったため怒られた) - 下記コマンドを実行しAコミットのレビュー中の内容までの情報を取得した。(rebaseの情報も取得できた)
$ git fetch gerrit refs/changes/変更番号下2桁/追跡番号/Aコミットのpatch setの番号
- fetchした情報をもとにcheckoutをしてレビュー中のファイルAを取得
- コマンド
$ git checkout AコミットのコミットID
を実行しコミットIDに結びついたファイルを取得した。 - 下記コマンドを実行してBコミットのファイルを取得した。
$ git cherry-pick -n BコミットのコミットID
- 取得したファイルをステージングする。
- 下記コマンドを実行した。
$ git add .
- 追加したBコミットのファイルを含めてコミットをした。
- 下記コマンドを実行した。
$ git commit --amend
- リモートにpushを行う。
- 下記コマンドを実行した。
$ git push gerrit HEAD:refs/for/ブランチ名