🥦
【Git】push済みのコミットをまとめたい
自分だけが作業しているブランチであればgit rebase
でコミット履歴をきれいにまとめることができます。
1. git rebase -i でまとめたいコミットを指定する
terminal
git log
で現在のコミット状況を確認後、以下のコマンドを実行します。
例:3個前のコミット履歴から修正したい場合はgit rebase -i HEAD~3
を実行
terminal
git rebase -i HEAD~n'
2. pickをfixupに修正する
viモードが起動し、n個前のコミット履歴から表示されます。
pick …変更なし
fixup …選択したコミットを 1 つ前のコミットに統合し、その際のコミットメッセージを破棄します。
例:git rebase -i HEAD~3
を実行した場合は3個前から表示されます
使用するviのコマンド
入力キー | 内容 |
---|---|
i | 挿入モードに変更(テキスト編集するためのモード) |
esc | コマンドモードに変更(テキストの保存やviの終了などを行う) |
:wq | 保存して閉じる |
:q! | 保存しないで閉じる |
3. ローカルでログを確認する
terminal
git log
4. リモートのログを強制更新する
git rebaseで修正した場合は、コミット番号も新しく書き変わるので強制pushが必要になります。
terminal
git push -f origin [作業しているブランチ名」
5. GitHubでコミットがまとまっていることを確認する
リモートでコミットがまとまっていることが確認できたら終了です。お疲れ様でした。
【番外編】 git rebaseに失敗した場合の修正方法
git rebaseをしくじって元に戻したいとき
git reflog
を使用してgitの作業履歴を確認します。
terminal
$ git reflog
ed1cab2 (HEAD -> working_branch, origin/master, origin/HEAD, master) HEAD@{0}: reset: moving to HEAD^^
617c754 HEAD@{1}: commit: Modify README.md
6d27530 HEAD@{2}: commit: Add base activity
戻りたい作業のハッシュを指定します。
terminal
git reset --hard 6d27530
この場合はAdd base activityをコミットしたところに戻ります。
Discussion