日本語 ▾ トピック ▾ 最新バージョン ▾ git-revert は 2.50.0 で最終更新されました

名前

git-revert - 既存のコミットを打ち消す

概要

git revert [--[no-]edit] [-n] [-m <parent-number>] [-s] [-S[<keyid>]] <commit>…​
git revert (--continue | --skip | --abort | --quit)

説明

1 つまたは複数の既存のコミットが与えられた場合、関連するパッチによって導入された変更を打ち消し、それらを記録する新しいコミットを作成します。これには、ワーキングツリーがクリーンであること (HEAD コミットからの変更がないこと) が必要です。

注: git revert は、以前のコミット (多くの場合、誤ったもののみ) の効果を打ち消す新しいコミットを記録するために使用されます。ワーキングディレクトリ内のコミットされていないすべての変更を破棄したい場合は、git-reset[1]、特に --hard オプションを参照してください。別のコミットにあった特定のファイルを抽出したい場合は、git-restore[1]、特に --source オプションを参照してください。これらの代替案はどちらもワーキングディレクトリ内のコミットされていない変更を破棄するため、注意してください。

これら3つのコマンドの違いについては、git[1]の「リセット、リストア、リバート」を参照してください。

オプション

<commit>…​

打ち消すコミット。コミット名を指定する方法のより完全なリストについては、gitrevisions[7] を参照してください。コミットのセットも指定できますが、デフォルトではトラバーサルは行われません。git-rev-list[1] とその --no-walk オプションを参照してください。

-e
--edit

このオプションを使用すると、git revert は revert をコミットする前にコミットメッセージを編集することを許可します。これは、ターミナルからコマンドを実行した場合のデフォルトです。

-m parent-number
--mainline parent-number

通常、マージのどちら側をメインラインと見なすべきかわからないため、マージを打ち消すことはできません。このオプションは、メインラインの親番号 (1 から始まる) を指定し、指定された親に対する変更を打ち消すことを許可します。

マージコミットを打ち消すと、マージによって取り込まれたツリーの変更を二度と必要としないことを宣言します。その結果、その後のマージでは、以前に打ち消されたマージの祖先ではないコミットによって導入されたツリーの変更のみが取り込まれます。これが目的とするものかどうかは状況によります。

詳細については、不完全なマージを打ち消す方法 を参照してください。

--no-edit

このオプションを使用すると、git revert はコミットメッセージエディターを起動しません。

--cleanup=<mode>

このオプションは、コミットメッセージがコミット機構に渡される前にどのようにクリーンアップされるかを決定します。詳細については、git-commit[1] を参照してください。特に、<mode> の値が scissors に指定されている場合、競合が発生した際に MERGE_MSG にはさみが追加されます。

-n
--no-commit

通常、このコマンドは、どのコミットが打ち消されたかを示すコミットログメッセージを含むいくつかのコミットを自動的に作成します。このフラグは、指定されたコミットを打ち消すために必要な変更をワーキングツリーとインデックスに適用しますが、コミットは作成しません。さらに、このオプションが使用される場合、インデックスは HEAD コミットと一致している必要はありません。revert は、インデックスの開始状態に対して行われます。

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

-S[<keyid>]
--gpg-sign[=<keyid>]
--no-gpg-sign

GPG-sign コミット。keyid 引数はオプションで、デフォルトはコミッター ID です。指定された場合、スペースなしでオプションに付加する必要があります。--no-gpg-sign は、commit.gpgSign 設定変数と以前の --gpg-sign の両方を打ち消すのに役立ちます。

-s
--signoff

コミットメッセージの最後に Signed-off-by トレーラーを追加します。詳細については、git-commit[1] の signoff オプションを参照してください。

--strategy=<strategy>

指定されたマージ戦略を使用します。一度だけ使用する必要があります。詳細については、git-merge[1] の MERGE STRATEGIES セクションを参照してください。

-X<option>
--strategy-option=<option>

マージ戦略固有のオプションをマージ戦略に渡します。詳細については、git-merge[1] を参照してください。

--rerere-autoupdate
--no-rerere-autoupdate

rerere メカニズムが現在の競合に対して記録された解決策を再利用してワーキングツリーのファイルを更新した後、その解決結果でインデックスも更新することを許可します。--no-rerere-autoupdate は、別途 git add で結果をインデックスにコミットする前に、rerere が何をしたかを再確認し、潜在的な誤マージを捕捉するのに良い方法です。

--reference

ログメッセージの本文を「This reverts <full-object-name-of-the-commit-being-reverted>.」で開始する代わりに、"--pretty=reference" 形式 (cf. git-log[1]) を使用してコミットを参照します。revert.reference 設定変数を使用して、このオプションをデフォルトで有効にすることができます。

シーケンサーサブコマンド

--continue

.git/sequencer の情報を使用して、進行中の操作を続行します。失敗した cherry-pick または revert で競合を解決した後も続行するために使用できます。

--skip

現在のコミットをスキップし、残りのシーケンスを続行します。

--quit

進行中の現在の操作を忘れさせます。失敗した cherry-pick または revert の後、シーケンサーの状態をクリアするために使用できます。

--abort

操作をキャンセルし、シーケンス前の状態に戻します。

git revert HEAD~3

HEAD の 4 番目のコミットによって指定された変更を打ち消し、打ち消された変更を含む新しいコミットを作成します。

git revert -n master~5..master~2

master の 5 番目のコミット (含む) から master の 3 番目のコミット (含む) までのコミットによって行われた変更を打ち消しますが、打ち消された変更を含むコミットは作成しません。revert はワーキングツリーとインデックスのみを変更します。

考察

Git は基本的なコミットメッセージを自動的に作成しますが、元のコミットが打ち消される理由を説明することを強くお勧めします。さらに、revert の revert を繰り返すと、件名がますます扱いにくくなります (例: *Reapply "Reapply "<original-subject>""*)。これらをより短く、よりユニークなものに書き直すことを検討してください。

設定

このセクションのこの行より下のすべての内容は、git-config[1] ドキュメントから選択的に含まれています。内容はそちらで見られるものと同じです。

revert.reference

この変数を true に設定すると、git revert--reference オプションが指定されたかのように動作します。

関連項目

GIT

git[1]スイートの一部

scroll-to-top