Open1
【Git】git resetのチートシート

git reset チートシート📝
間違った、commitメッセージでcommitした後に戻すgit reset コマンドを毎回、忘れるため整理する📝
commit完了後にcommitを取り消したいパターン📝
# commitを取り消す -> add状態(staging)に戻る。
git reset --soft HEAD^
# add状態(staging)からさらに、変更あり状態(modified)に戻す
git reset .
git reset チートシート
コマンド | 説明 | ステージングエリアへの影響 | ワーキングディレクトリへの影響 |
---|---|---|---|
git reset --soft <commit> |
HEADを指定したコミットに戻すが、コミットで記録されていた変更はステージに残す | 変更点はステージ済み状態で保持 | ワーキングツリーは変更なし |
git reset --mixed <commit> (デフォルト) |
HEADを指定したコミットに戻し、変更点をステージから外す(変更はワーキングツリーに残る) | ステージングをクリア | ワーキングツリーに変更は残る |
git reset --hard <commit> |
HEADを指定したコミットに戻し、ステージ・ワーキングツリーの変更を全破棄 | ステージングクリア | ワーキングツリーの変更も破棄 |
git reset --soft HEAD^ |
1つ前のコミット(HEAD^)に戻し、直前のコミット分の変更はステージ済み状態 | 直前のコミット分がステージ済みに | ワーキングツリーは変更なし |
git reset <commit> -- . |
特定のファイルまたはすべて(. )を指定コミットの状態に戻し、ステージからも外す |
指定パスのステージをクリア | 指定パスが指定コミット時点の内容に戻る |
git reset |
引数なしでは--mixed と同等。ステージをHEADに合わせてクリアし、ワーキングツリーは変更そのまま |
ステージを最新コミットに合わせる(変更差分ステージ解除) | ワーキングツリーは変更そのまま |
git reset <file> |
指定したファイルをステージから外し、作業ツリーはそのまま | 該当ファイルのステージを解除 | ワーキングツリーは変更なし |
git reset HEAD |
現在のHEADを基準にステージをクリア(git reset と同義) |
すべてのステージを解除 | ワーキングツリーは変更なし |
git reset --merge |
マージ中の場合、マージステートをリセットし、マージ中止(git merge --abort に近い動作) |
ステージをマージ開始前の状態へ戻す | マージ差分を含め、ワーキングツリーをマージ前状態へ戻す |
使い分けのポイント
-
--soft
:
コミットを取り消して巻き戻したいが、変更内容を失わず、すぐに再コミットしたい場合に使用。
(変更はそのままステージ済みなのでコミットし直すだけ) -
--mixed
(デフォルト):
コミットを取り消し、変更点を一度ステージから外してから調整したい場合。
(ワーキングツリーには変更が残るため、必要に応じて再度ステージしなおせる) -
--hard
:
コミットや変更点を完全に破棄したい場合。
(ステージ・ワーキングツリーの変更が全て消えるので、取り戻せないことに注意)