1. ホーム
  2. git

[解決済み] ステージングせずに git revert --no-commit を実行する

2022-03-13 09:43:41

質問

通常、コマンド git revert は自動的にいくつかのコミットを作成し、どのコミットが差し戻されたかを示すコミットログメッセージを表示します。

自動コミットを回避するために、オプション -n (または --no-commit ).

しかし、このコマンドの後、元に戻されたファイルはステージングされた領域にあります。コマンドを使用すれば、ステージングを解除することができます。 git reset HEAD .

コミットやステージングを行わずにコミットを戻す直接的な方法はありますか?

言い換えれば、インデックスに手を付けずに、作業ディレクトリにのみ変更を適用するコミットを戻す直接的なコマンドはありますか?

解決方法は?

そのためのコマンドは一つではありません。 すでにご指摘のように git revert -ngit reset を使えば、インデックスで元に戻すことができます。

その方法以外に git apply -R でパッチを逆適用し、コミットをパッチに変換することができます。 git show ということです。

$ git show <rev> | git apply -R

は同じ効果をもたらしますが、ひとつだけ重要な(しかし微妙な)違いがあります。 以下は git revert のドキュメントに、私なりの強調を加えています。

<ブロッククオート

-n, --no-commit
通常、このコマンドは自動的にいくつかのコミットを作成し、コミット ログメッセージには、どのコミットが取り消されたかが書かれています。このフラグは そのコミットを元に戻すために必要な変更を作業環境 ツリーおよびインデックスを作成しますが、コミットを行うわけではありません。さらに このオプションを使用すると、インデックスが HEADコミット の最初の状態に対して戻されます。 インデックスを作成します。

言い換えれば git revert -n はインデックスで動作し のように、作業ツリーを更新する副次的な効果があります。 そのため git apply コマンドは (デフォルトでは) ワークツリーに対してのみ動作し、実際には git リポジトリの外部で使用することができます。