revert: 前のコミットの取り消し

元のコミットを明確に参照するrevertコミットメッセージの書き方を学びます。revert形式、revertとfixの使い分け、取り消されたコミットへのリンクを解説します。

Type Examples

詳細な説明

revert コミットタイプ

revertタイプは、前のコミットを取り消すときに使用します。revertメッセージが取り消される元のコミットを明確に参照することが重要で、コミット履歴が理解可能な状態を保ちます。

標準フォーマット

Gitのgit revertコマンドは以下の形式でメッセージを生成します:

Revert "feat: add user authentication"

This reverts commit abc1234.

Conventional Commitsを使用する場合、以下のように適応:

revert: add user authentication

This reverts commit abc1234def5678.
The OAuth provider has a critical vulnerability
(CVE-2024-XXXX) that needs to be patched first.

revertするタイミング

以下の場合にコミットをrevertします:

  • コミットがバグやリグレッションを導入した
  • ビジネス上の理由で機能をロールバックする必要がある
  • コミットで導入された依存関係にセキュリティ問題がある
  • コミットがビルドやCIパイプラインを壊した
  • 変更を出荷する前にさらなる作業が必要

revertとfixの比較

revertを使う場合... fixを使う場合...
コミット全体を取り消す 問題の一部を修正する
元のコミットがマージされるべきでなかった 元のコミットは正しいが不完全だった
すぐにロールバックする必要がある 調査してパッチを当てる時間がある

元のコミットの参照

常にフルコミットハッシュまたは少なくとも7文字以上を含めます:

revert: add payment processing webhook

This reverts commit a1b2c3d4e5f6g7h8.

The webhook endpoint was receiving duplicate events
from Stripe, causing double-charges. Reverting until
idempotency handling is implemented.

Refs #987

破壊的変更のrevert

元のコミットが破壊的変更だった場合、revertも破壊的変更です(新しい動作を削除するため):

revert!: redesign API response format

This reverts commit f1e2d3c4b5a6.

BREAKING CHANGE: Response format reverted from
{ result, errors } back to { data, error }
pending further discussion with API consumers.

部分的なrevert

コミットの一部のみを取り消す必要がある場合は、代わりにfixrefactorを使い、元のコミットのどの部分を取り消しているかを説明:

fix: remove broken OAuth provider from login

Partially reverts commit abc1234. Keeps the session
management changes but removes the Google OAuth
integration that caused login failures.

ユースケース

mainにマージされたコミットがすべてのユーザーのチェックアウトフローを壊すリグレッションを導入しました。根本原因が調査されている間にサービスを復旧するためにコミットを即座にrevertする必要があります。何がrevertされたか、なぜかを明確に識別するコミットメッセージが必要です。

試してみる — Git Commit Message Generator

フルツールを開く