LoginSignup
0
0

More than 1 year has passed since last update.

過去のコミットで間違ったファイルを追加、さらにいらない差分を含めてしまった時、私がやったこと

Posted at

何が起こったか

  1. ユニットテストを書いているブランチ(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

具体的に何がしたい?

  1. mvp/hogeB_ViewController上ではファイルパスを被ったファイル.swiftはいらない
    → なぜ?
    unit_test/hogeA_ViewControllerのファイルパスを被ったファイル.swiftを採用したいから(=masterにマージしたい)
  2. 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してしまうとそのファイルごと消えてしまうので今回は使えなかった。

誰かいいアイデアを持っていたらコメント欄に書いて欲しいです...

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0