私の問題: 私はばかげてファイルに多くの変更を加え、それらを一度にコミットしました。
それ以来、変更の多くがくだらないものであることに気付きました...しかし、それらの多くは良いものでもありました.
変更の一部を選択的に元に戻すにはどうすればよいですか?
それ以降、他に何もコミットしていないと仮定すると、 commit を元に戻し、 を使用してファイルの必要な部分を追加してgit add -pから 、再コミットします。
以前のコミットを部分に分割するgit rebase -iことは で実行できますが、履歴を書き換えることができるブランチでのみ使用する必要があります。操作の順序は次のようなものです。
git rebase -i <commit>~1
<commit>分解したいコミットはどこにありますか。対話モードで、フラクチャしたいコミットにまたはを変更pickします。次に、エディターを閉じて、リベースを続行します。影響を受けるコミットに到達すると一時停止し、その時点で必要な編集を行うことができます。これには、 unstage 、すべての unstage 、および作業ディレクトリの変更を破棄することが含まれます。editerebasegit reset HEAD <file><file>git reset HEADgit checkout -- <file>
ここから、任意の順序で変更をコミットできます。git add -p同じファイルへの複数の変更を複数のコミットでコミットするのが最適な場合は、パッチ セットを対話的に追加することをお勧めします。
最後に、フラクチャ コミットで必要なものをすべてコミットし、リベースを続行する準備が整ったら、単に を発行しgit rebase --continueます。
履歴の書き換えを避けたい場合、この回答git revert --no-commitは、コミットの一部だけを元に戻す方法を示しています。
netbeans などの一部の IDE でファイルを開くと、すべての変更がライブで表示され、各行の先頭にカラー コードが表示されます。これらのカラー マーカーの 1 つを右クリックすると、以前にあったものが表示されます。右クリックのコンテキスト メニューでは、ファイルへの変更のその部分のみを元に戻すこともできます。すでに変更をコミットしているためgit reset soft HEAD^、実行してから netbeans でファイルを開き、選択的に変更を元に戻してから実行できますgit commit。
誰かがemacsでこれを行う方法を知っていますか? (この投稿に出くわしたとき、それが私が探していたものです。)