git checkout .
add されていない変更をなかったことにする。
これもコミットしたかった!
→直前のコミットですか?
→Yes →ならまだ間に合う! git add file git commit --amend -m "同じメッセージ"
→No → rebaseするしかないです。
git logで確認。どのコミットでどんなコードの変更があったかは、git diff HEAD~Nで見れます。もしくはsource treeを使いましょう。
→git rebase -i HEAD~N で、変更をねじ込みたいコミットの部分をpush → editにします。
→git logでHEADがそのコミットにいるかを確認。この状態というのは、今狙っているコミットが終わった状態です。
→git diff HEAD^でもう一度確認。そのコミットにねじこむので良いですか?
→git reset --soft HEAD をすると、git addはしているけどまだコミットしていない状態に戻ります。ここで変更を加えて、git add → git commmit としましょう。
→これで問題なければgit rebase --continueとします。これでハッピーエンドです。
このときに、既にリモートにpushしていたコミットまで遡っていた場合は、git push -fと、フォースプッシュする必要があります。他人と一緒にレポジトリを編集している場合は無断にやることは絶対に避けましょう。
参考
https://qiita.com/310ma3/items/e0ec74b47c6c219f2a8b
https://backlog.com/ja/git-tutorial/stepup/13/
https://qiita.com/FrogWoman/items/31cd5df4c4a5ae23f7e0
https://backlog.com/ja/git-tutorial/stepup/28/
https://git-scm.com/docs/git-rebase
https://qiita.com/zaneli@github/items/8d519a229653a2ed9ec6
http://www-creators.com/archives/5238#git_rebase_-i