英語 ▾ トピック ▾ 最新バージョン ▾ git-revert は 2.44.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]の「リセット、リストア、リバート」を参照してください。

オプション

<コミット>…​

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

-e
--edit

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

-m 親番号
--mainline 親番号

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

マージコミットを打ち消すことは、そのマージによってもたらされたツリーの変更を今後一切望まないことを宣言します。結果として、後続のマージは、以前に打ち消されたマージの祖先ではないコミットによって導入されたツリーの変更のみをもたらします。これは、あなたの望む結果である場合とそうでない場合があります。

詳細については、revert-a-faulty-merge How-Toを参照してください。

--no-edit

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

--cleanup=<モード>

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

-n
--no-commit

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

これは、複数のコミットの効果を連続してインデックスにリバートする場合に便利です。

-S[<キーID>]
--gpg-sign[=<キーID>]
--no-gpg-sign

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

-s
--signoff

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

--strategy=<戦略>

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

-X<オプション>
--strategy-option=<オプション>

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

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

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

--reference

ログメッセージの本文を「This reverts <打ち消されるコミットの完全なオブジェクト名>.」で始める代わりに、"--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番目のコミット(含む)から最後から3番目のコミット(含む)までのコミットによって行われた変更を打ち消しますが、打ち消された変更を含むコミットは作成しません。このリバートはワーキングツリーとインデックスのみを変更します。

考察

Gitは基本的なコミットメッセージを自動的に作成しますが、元のコミットがなぜ打ち消されるのかを説明することを*強く*お勧めします。さらに、リバートを繰り返しリバートすると、たとえば*「"Reapply "<元の件名>"を再適用」*のように、件名がますます扱いにくくなります。これらをより短く、よりユニークなものに書き換えることを検討してください。

設定

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

revert.reference

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

関連項目

GIT

git[1]スイートの一部

scroll-to-top