Edited at

【git rebase -i】gitのcommitをまとめる

More than 1 year has passed since last update.

似た記事は沢山あるが、

忘れたころに調べると、

いろいろな記事を回ることが多いため、

自分なりにまとめる。


やりたいこと

「ぎゃー!細かく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