しばらく前にファイルに適用された変更の一部を元に戻すにはどうすればよいですか。次のコミットがあり、「file.txt」A
との間で偶発的な変更が発生しましたB
...--A--B--...
すべてのfile.txt-B-A.patch
変更を元に戻すファイルの差分パッチがあります。ただし、マージの競合で変更を手動で選択するのと同じように、特定の変更を元に戻したいだけです。パッチ ファイルを変更せずにこれを行う方法はありますか?file.txt
多くの git コマンドには、部分的に何かを行うための-p
オプション (「パッチ」) または(「インタラクティブ」) があります。-i
任意の差分の場合、これはサポートされていないと思いますが、パッチを適用してから、リポジトリの最上位にいる場合git checkout -p -- <path(s)>
など、を使用してステージングされていない変更を選択的に元に戻すことができます。git checkout -p -- .
これを行う別の方法がありますが、パッチファイルはまったく必要ありません。
A
問題はからに起こったB
ので、最初に変更を元に戻しますが、B
自動的にコミットしないでください。
$ git revert --no-commit <commit hash of B>
行う変更git revert
は段階的に行われます。それらをアンステージします。
$ git reset HEAD
次に、インタラクティブにfile.txt
実行し、保持したい変更のみをステージングします。
$ git add --patch file.txt
これで、選択した復帰のみがステージングされます。それらをコミットします。
$ git commit
最後に、ステージングされていない残り物をからクリーンアップしgit revert
ます。
$ git reset --hard