似た記事は沢山あるが、
忘れたころに調べると、
いろいろな記事を回ることが多いため、
自分なりにまとめる。
やりたいこと
「ぎゃー!細かくcommitしすギター!」
とか
「コミットログ見づれー!」
って時にcommitをまとめたい。
※リベースするって言うらしいですよ。
作業手順
commitログを確認
コマンド
git log --oneline
コマンド結果
commit_id_3 commitメッセージ(2017/03/01)
commit_id_2 commitメッセージ(2017/02/01)
commit_id_1 commitメッセージ(2017/01/01)
※コミットの履歴が多い場合「q」キーで終了
リベース指示書を作成
コマンド
git rebase -i コミットid
※注意
指定するコミットidは、リベースしたいところの一つ前。
例えば「commit_id_2」「commit_id_3」をリベースしたい場合、
指定するのは「commit_id_1」になる。
コマンド実行後(viで下記の指示書が開く)
pick commit_id_2 commitメッセージ(2017/02/01)
pick commit_id_3 commitメッセージ(2017/03/01)
# ~~省略~~
# 指示書の
# 書き方説明
※指示書の詳細
「指示コマンド コミットid コミットメッセージ」が昇順で並んでいる。
デフォルトで指示コマンドは「pick = コミットをそのまま残す」になっているので、
「squash」か「fixup」にする必要がある。
※指示コマンド
コマンド | 説明 |
---|---|
(p)pick | コミットをそのまま残す。 |
(r)reword | コミットメッセージを変更。 |
(e)edit | コミット自体の内容を編集。 |
(s)squash | 直前のpickを指定したコミットに統合。 メッセージも統合。 |
(f)fixup | 直前のpickを指定したコミットに統合。 メッセージは破棄。 |
指示書修正例
pick commit_id_2 commitメッセージ(2017/02/01)
s commit_id_3 commitメッセージ(2017/03/01)
# ~~省略~~
# 指示書の
# 書き方説明
リベース後のコミットメッセージ編集(squashの場合)
指示書の保存後、自動的にコミットメッセージ編集に移る。
編集して保存でおk。
リベース後のpush
リベース後の状況によっては、
pushしたい内容は、originよりもcommitが前になり、
pushできないよ!と怒られる時がある。
originのcommitを破棄して、
リベースした内容を反映させて良い場合は、
git push -f origin master
のように強制的にpushすればよい。
追加:間違ったrebaseを削除したい
git rebase --abort