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
コミットの一部のみを取り消す必要がある場合は、代わりにfixやrefactorを使い、元のコミットのどの部分を取り消しているかを説明:
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されたか、なぜかを明確に識別するコミットメッセージが必要です。