何が起こったか
- ユニットテストを書いているブランチ(unit_test/hogeA_ViewController)とあるMVCからMVPにリファクタしているブランチ(mvp/hogeB_ViewController)に同じパスの同じ名前のファイル(以下ファイルパスを被ったファイル.swift)と mvp/hogeB_ViewControllerに要らない差分を含んだファイルが過去にコミットされているのをmvp/hogeB_ViewControllerで発見
// Source treeで発見
commit hash値: yarakashitacommit
new file: ファイルパスを被ったファイル.swift
modified: コミットしたくなかった差分を含んだファイル.swift
modified: コミットしたい差分を含んだファイル.swift
new file: コミットに入れたい新しいファイル.xib
具体的に何がしたい?
- mvp/hogeB_ViewController上ではファイルパスを被ったファイル.swiftはいらない
→ なぜ?
unit_test/hogeA_ViewControllerのファイルパスを被ったファイル.swiftを採用したいから(=masterにマージしたい) - mvp/hogeB_ViewController上でコミットyarakashitacommitにはコミットしたくなかった差分を含んだファイル.swiftの差分は今後一切要らない
-> 上記二つをコミットyarakashitacommitから除外したい
じゃあ何をしたの?
コミットを一旦消して、いる差分、要らない差分をコミットし直した = コミットをやり直した
- やらかしたコミットをgit reset --soft yarakashitacommitした
git reset --soft yarakashitacommit
- yarakashitacommitに含まれている新しいファイルは削除され、modifiedされているファイル(適切な日本語が思いつきませんでした)はただunstagedされ残る。
- 削除されたファイルの中でコミットに含めたいのはyarakashitacommitの一個前のコミットにチェックアウト
git checkout コミットに入れたい新しいファイル.xib yarakashitacommitの一個前のハッシュ値またはHEAD@{?}
- git statusでコミットに含めたいファイルはあるか確かめる
- 不足していなかったらコミット
最後に
これでなんとかやりたいことは出来ました。ただこれでは本当に自分の残したい差分が残っているか怪しいし、これをやった後にunit_test/hogeA_ViewControllerとmvp/hogeB_ViewControllerをmasterにマージするときにファイルパスを被ったファイル.swiftが消えないか心配。git reverse -i
で試したけども消したいファイルはreverse中にgit rm ファイル名.swift
すればいいが、そのファイルは残したいけど、該当のコミットに入っている差分は要らないというのは、git rm
してしまうとそのファイルごと消えてしまうので今回は使えなかった。