ファイルを編集している際,三つ前のコミットに現在のコミットを取り込みたい状況が発生したとします. git rebaseを用いることで,過去のコミットの修正を行う事が出来ます.
$ git log --oneline 92244c6 (HEAD -> master) add file2 7651e79 add file1 aec26dc initial commit
ここで,遡りたいコミットのひとつ前のコミットのハッシをコピーし,
$ git rebase -i aec26dc
と打つとエディタがひらいてコミットが羅列されているはずです.
変更を加えたいコミットに対してpick -> editと変更すると,そのコミットを変更することができます.
(変更前)
pick 7651e79 add file1 pick 92244c6 add file2
(変更後)
edit 7651e79 add file1 pick 92244c6 add file2
これでエディタを閉じるとeditとしたところでrebaseがストップし,新しく変更を記述することができます.
粗方過去のコミットに取り込みたい変更が追加し終わったら
$ git add . $ git rebase --continue
としてrebaseを進めることができます.
ここで,過去のコミットに対してこのように変更を加えた場合,コミットログのハッシュが書き変わってしまうため,リモートにpushするときにはじかれてしまいます. rebaseが意図したものである場合は
$ git push --force
とすることで強制的にremoteの変更をoriginに同期させることができます.
このrebaseによる操作をstashなどと組み合わせるとコミットログが簡潔にまとまり,後々コンフリクトなどに対応しやすくなると思います.