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
    コミットや変更点を完全に破棄したい場合。
    (ステージ・ワーキングツリーの変更が全て消えるので、取り戻せないことに注意)