Menu
Coddy logo textTech

Git Revert

最終更新

git revert は、変更の逆を適用する新しいコミットを作成することでコミットを取り消します。履歴を書き換えるのではなく履歴を追加するため、revert はすでにプッシュ済みのコミットを取り消す安全な方法です。git reset とは異なり、他の全員に書き換えられたブランチの調整を強いることはありません。

これらをターミナルプレイグラウンドで試してみましょう。ブラウザ内の本物のシェルで、インストールは不要です。

git revert は問題のコミットをそのまま残し、その逆の変更を適用する新しいコミットを追加します。履歴は書き換えられません。

構文

CommandWhat it does
git revert HEAD最新のコミットを取り消す
git revert <hash>ハッシュで特定のコミットを取り消す
git revert HEAD~2..HEADコミットの範囲を取り消す
git revert -n <hash>取り消すがまだコミットしない(ステージのみ)
git revert -m 1 <merge-hash>親 1 を残してマージコミットを取り消す

revert の実行中

revert が競合に遭遇したら、それを解決して続行します。

CommandWhat it does
git revert --continue競合を解決した後に再開する
git revert --abort進行中の revert を中止する
git revert --skip現在のコミットをスキップして続行する

revert vs reset

Behaviorgit revertgit reset
履歴を書き換えるいいえはい
プッシュ済みのコミットで安全はいいいえ
新しいコミットを作成するはいいいえ
途中のコミットを取り消すはい面倒

git revert のよくある質問

git revert と git reset の違いは何ですか?
git revert は、以前のコミットの変更を取り消す新しいコミットを追加し、履歴をそのまま残します。すでにプッシュしたコミットに対して安全です。git reset はブランチのポインタを後ろに移動して履歴を書き換えるもので、ローカルのコミットには問題ありませんが、共有ブランチでは危険です。公開されたコミットを取り消すには revert を、ローカルのものを取り消すには reset を使いましょう。
すでにプッシュされたコミットを取り消すにはどうすればよいですか?
git revert <hash>(最新のものには git revert HEAD)を実行し、その新しい revert コミットをプッシュします。revert は履歴を書き換えないため、これが共有コミットを取り消す正しい方法です。force-push も不要で、すでにプルしたチームメイトへの支障もありません。
マージコミットを取り消すにはどうすればよいですか?
マージコミットには 2 つの親があるため、Git はどの履歴の系統を残すべきかを知る必要があります。git revert -m 1 <merge-hash> を使います。ここで -m 1 は、最初の親(通常はマージ先のブランチ)を残すように Git に指示します。マージを取り消すとマージされた変更は元に戻りますが、マージ自体は履歴に残ります。
複数のコミットを一度に取り消せますか?
はい。直近の 2 つのコミットを取り消すには git revert HEAD~2..HEAD のような範囲を渡すか、複数のハッシュを列挙します。Git はデフォルトで取り消したコミットごとに 1 つの revert コミットを作成します。-n を付けるとコミットせずにすべての取り消しをステージできるので、その後自分で 1 つのコミットを作成しましょう。
これをオンラインで練習できますか?
はい。ターミナルプレイグラウンドを開いて、ブラウザ内の本物のシェルで git revert を実行できます。インストールは不要です。Coddy の無料のインタラクティブな Git コースでも、変更の取り消しを段階的に扱っています。
Coddy programming languages illustration

Coddy で Git を学ぼう

始める