##今回解決したい状況
すでにリモートのmasterへpush済みの最新のcommitに修正を加えたい(今回は分割したい).
##手順
###1.リモートの該当コミットを削除
今回は、最新のコミットを削除したいため
git push -f origin HEAD^:master
のようにし、リモートの街頭コミットを削除.
(最新から2個目のコミットの場合は、HEAD^^:masterのようにする。)
###2.ローカルの作業内容を一時退避(該当コミットの後に、別の作業を進めていた場合)
git stash
として、現在の作業内容を一時退避する.
###3.ローカルの該当commitの内容を修正
まず、
git rebase -i HEAD^
とする.
(※この際に、ローカルで新しい作業内容が存在するとエラーとなるため、上記にあるstash作業を行う)
次に、
pick 8e9fe0a index.htmlを修正
のような表記が上部にあらわれるため、これを
edit 8e9fe0a index.htmlを修正
とすることで、このcommitを修正できる.
よって、この後は、まず
git reset HEAD^
とし、commitの内容をadd前へ戻した後、今回の例では、分割を行いたいため、
はじめにcommitしたい内容をadd&commitした後、次にcommitしたい内容をadd&commitする.
その際に、同一ファイル内でも、編集箇所ごとにaddを分けたい場合はこの記事を参照.
[Gitで部分的にコミットする方法]
(https://qiita.com/miyohide/items/79ab0ff3b3852289a6be)
その後、
git rebase --continue
とすることで、ローカルのcommitが分割された.
###4.リモートへ反映
git push origin master
とする.
###5.一時退避していた作業内容を戻す
stashしていた作業内容を戻すには、
git stash pop
とする.
以上で、ローカル, リモート共に修正が完了した。
##参考ページ
[Git のさまざまなツール - 歴史の書き換え]
(https://git-scm.com/book/ja/v2/Git-のさまざまなツール-歴史の書き換え)
【git】git pushを取り消す
[git]特定のコミットの内容を修正する
git-rebase - 過去のコミットを修正したい(コミット分割、内容訂正・追加)
gitでコミットしたものを後から複数のコミットに分割する方法