一瞬で過去にもどれる魔法の呪文集|Gitやばい辞典

現場で起きる予期せぬ衝突やノイズを瞬時にかき消す、一瞬で過去に戻れる「魔法の呪文」をまとめました。
リモートと完全に同期する呪文
git fetch origin
git reset --hard origin/main
※ main の部分は、自分の環境のブランチ名(master など)に合わせて書き換えてください。効果: ローカルの状態を捨て、リモート(GitHub等)の最新状態に強制上書きする。
使い時: 本番環境で何をやってもpullが通らない時の最終手段。
直前のマージやプルをなかったことにする呪文
git reset --hard ORIG_HEAD効果: pull や merge を実行する直前の状態にタイムスリップする。
使い時: 「pull したらコンフリクトで画面が真っ赤になった!一旦やる前に戻したい!」という時。
できること: 保存(コミット)していない、エディタで書いた未保存のコードを全部消して元通りにする。
できないこと: マージしてしまった履歴(コミット)を消すことはできない。
ORIG_HEADとは?
ORIG_HEADは、git am、git merge、git rebase、git reset を実行した瞬間に、**「コマンドを叩く直前に自分が立っていた場所」**へ自動で貼り替えられるタグです。
対象のコマンドが呼ばれるたびに、最新の「実行直前の場所」へと移動します。
これを利用することで、マージやリセットなど大きな操作をしてソースがおかしくなっても、その修正直前まで時を戻すことができます。
直前のコミットをなかったことにする呪文
# ファイルの変更内容は残したまま、コミットだけ取り消す
git reset --soft HEAD~1効果: ファイルの修正内容は残したまま、最新の「コミット(保存)」だけを取り消す。
使い時: 「コミットメッセージを間違えた」「余計なファイルまでコミットに含めてしまった」時。
自分の修正をなかったことにする呪文
git checkout .できること: 保存(コミット)していない、エディタで書いた未保存のコードを全部消して元通りにする。
できないこと: ステージング(add)の内容、マージしてしまった履歴(コミット)を消すことはできない。
git reset --hard HEAD効果: まだコミットしていない「作業中の変更」や「ステージング(add)した内容」をすべてゴミ箱に捨てます。
使い時: 「いろいろいじりすぎて収拾がつかなくなったから、一旦今のコミット状態までリセットしたい」という時。
上記2つのコマンドでは、まだGit管理していない(一度も add されていない)新しいファイルやディレクトリは消えません。そんな時はこちら。
git clean -df効果: 一度も add されていない新規ファイルやディレクトリを強制削除する。
使い時: サーバー上にいつの間にか増えた「謎のファイル」を一掃したい時。

