web-dev-qa-db-ja.com

作業コピーにコミットを逆適用する

以前のコミットによって導入された効果を調査するために、それを作業コピーに逆適用して、コードをいじりたいと思います。

パッチの作成と適用に関するワークフローで管理しましたが、これをもっと簡単に行えるかどうか疑問に思います。

git checkout -b "tmp-fiddle"
git diff -R -p d9fd2bb^ d9fd2bb > patch_to_examine.patch
# Manually edit the patch a little
git apply patch_to_examine.patch

git revertまたはgit rebase -iは新しいコミットを導入するか、履歴を変更するため、私は見ていません。d9fd2bbで導入された変更を自分に適用しないようにしたいだけです。現在の作業コピー。

32
berkes

どうですか git revert -n

-n
--no-commit

通常、コマンドは、どのコミットが元に戻されたかを示すコミットログメッセージを使用して、いくつかのコミットを自動的に作成します。このフラグは、名前付きコミットを作業ツリーとインデックスに戻すために必要な変更を適用しますが、コミットは行いません。さらに、このオプションを使用する場合、インデックスはHEAD commitと一致する必要はありません。復帰は、インデックスの開始状態に対して実行されます。

これは、複数のコミットの効果を連続してインデックスに戻す場合に役立ちます。

48
Gareth

動作する別の方法はgit show | git apply -Rです。 -Rはdiffの逆を表します。

これはどの差分でも機能するため、git diff ... | git apply -Rを実行できます。

または、隠し場所を逆にしますgit stash show -p stash@{0} | git apply -R

1
dosentmatter