直前のGitコミットを取り消す:soft resetとrevert
各ブロックは別のケースであり、一括実行するスクリプトではありません。自分のリポジトリに合うケースを選び、ブランチ名、パス、VERIFIED_COMMITを置き換えてください。中止コマンドは対応する進行中の操作だけに使い、両方の選択肢を実行しないでください。
要点
ローカルの最後のコミットを取り消して変更を保つなら、reset --softでブランチを親へ動かし、インデックスと作業ファイルを残します。共有済みならrevertで逆変更を追加します。コードを保つか、誰が履歴を持つかを先に判断してください。
例と前提条件
例は親を持つ通常の非mergeコミットが現在の先端にあり、作業ツリーがクリーンで無関係なステージ変更もありません。最初のコミットにHEAD^はなく、mergeには複数の親があります。どちらもこの省略形の前提外です。HEAD~1を万能undoにせずグラフを読みます。
変更前に状態を確認する
差分、状態、共有状況を確認します。コミットを外してコードを続ける、公開コードを打ち消す、全部捨てるのは別の結果です。公開ブランチを書き換える前に共同作業者と調整します。新しい日時や自分の著者名だけでは未共有と判断できません。
git status --short
git log -3 --oneline --decorate
git show --stat HEAD参照または別のチェックアウトを保つ
HEADにrescue/before-undoを作り、元の確定済み状態を保ちます。未コミットファイルは別に保存し、ブランチには保存されません。このクリーンな例ではsoft resetで当該差分だけがステージに現れます。変更済みインデックスなら複数タスクが混ざり得るため別途確認します。
git branch rescue/before-undo HEAD
SCHOOL_UNDO=$(git rev-parse HEAD)最初の手順
ローカル変更を保つ場合はreset --soft HEAD^の後にdiff --cachedを読みます。内容はインデックスと作業ツリーに残り、改めてコミットできます。mixed resetはインデックスへの効果が別です。表示を短くする目的だけで、ファイルも変更する--hardへ切り替えないでください。
git reset --soft HEAD^
git diff --cached
git status --short別の結果を意図して選ぶ
共有済み通常コミットならIDをSCHOOL_UNDOに記録しrevertします。受け取られた履歴を維持して逆変更を新しいコミットにします。通常push前に結果とプロジェクトチェックを確認します。mergeのrevertには主系統の親の選択と後続mergeへの理解が必要なので専用手順を使います。
git revert "$SCHOOL_UNDO"制限と例外
revertは後続作業と競合する場合があります。statusを読み、解決してステージしrevert --continueを使います。選択が違う場合はrevert --abortです。reset --softには同じ続行・中止状態はありません。進行中のrevertを残して別の履歴修正を始めないでください。
git status
git revert --abort競合と後片付け
確定済みコードとローカルファイルも捨てるのは追加の破壊的判断です。先に保存状態を確認します。未コミット作業はreflogにありません。restore points有効かつローカル変更検出時、FluxGitは対応hard reset前にsafety stashを保存できる場合があります。この通常のターミナル例はその保護操作を呼びません。
結果を確認する
soft reset後は先端とステージ差分を救出参照と比較します。revert後は意図した動作だけを打ち消し、必要な後続作業を保つか確認します。プロジェクトチェックを行い、レビュー中は救出を残します。Gitがエラーなく終わるだけではコードの正しさは保証されません。
git log -4 --oneline --decorate
git status --short
git diff --cachedよくある質問
soft resetはファイルを消さず、参照だけを動かしてツリーとインデックスを保ちます。revertは元のコミットを消さず逆変更を追加します。reflogは保持されたローカル参照とコミットオブジェクトの記録で、あらゆる未保存ファイルを復元するものではありません。
FluxGitで操作を確認する
FluxGitの履歴と差分の表示で、操作と関連コミットを確認してください。この例のブランチ、共有履歴、ローカルファイルのチェックは維持します。現在利用できるビルドと対応プラットフォームはダウンロードページで確認できます。