通常、コマンドgit revert
は、どのコミットが元に戻されたかを示すコミットログメッセージとともにいくつかのコミットを自動的に作成します。
自動コミットを避けるために、オプション-n
(または--no-commit
)があります。
ただし、このコマンドの後、元に戻されたファイルはステージングされた領域にあります。コマンドgit reset HEAD
を使用してステージングを解除できます。
コミットおよびステージングせずにコミットを元に戻す直接的な方法はありますか?
言い換えると、インデックスに触れずに、変更を作業ディレクトリにのみ適用するコミットを元に戻す直接コマンドはありますか?
単一のコマンドはありません。既に述べたように、git revert -n
とgit reset
を組み合わせて、インデックス内で元に戻すことができます。
その方法に加えて、git apply -R
を使用してパッチを「逆適用」でき、git show
を使用してコミットをパッチに変換できます。
$ git show <rev> | git apply -R
同じ効果がありますが、重要な(ただし微妙な)違いが1つあります。 git revert
のドキュメントから引用して、独自の強調を追加しましょう。
-n, --no-commit
通常、コマンドは、どのコミットが元に戻されたかを示すコミットログメッセージを含むいくつかのコミットを自動的に作成します。このフラグは、名前付きコミットを作業ツリーとインデックスに戻すために必要な変更を適用しますが、コミットは行いません。さらに、このオプションを使用すると、インデックスはHEAD commit。元の状態に戻すのはインデックスの初期状態に対して行われます。
言い換えると、git revert -n
はインデックスで動作し、作業ツリーを更新するという副作用があります。 git apply
コマンドは(デフォルトでは)ワークツリーでのみ動作し、実際にはgitリポジトリの外部で使用できます。