実行前の状態
README.md を 1 回コミットした
この
ターミナル
git init -q -b main hello
cd hello
echo "# hello" > README.md
git add README.md
git commit -q -m "README を作る"
echo "start" >> README.md
git commit -q -a -m "README に説明を足す"最小の例と結果
--soft は、HEAD~1 は 1 つ前の
ターミナル
git reset --soft HEAD~1
git log --onelinea1b2c3d README を作るターミナル
git status -sM README.mdgit resetは、うまく いくと 何も 表示しません。 - 履歴から 2 回目の
コミットが 消えました。 M README.mdの左の Mは、書き足した 1 行が ステージに 載ったままという 意味です。 変更 その ものは 残っています。
reset には、
| 書き方 | 消えるもの |
|---|---|
--soft | 履歴の |
--mixed (何も | 履歴の |
--hard | 履歴の |
続けて、Unstaged changes after reset の
ターミナル
git resetUnstaged changes after reset:
M README.mdターミナル
git status -s M README.md最後に --hard を
ターミナル
git reset --hardHEAD is now at a1b2c3d README を作るターミナル
cat README.md# hellostart とgit reflog で
成功の確認
git log --oneline で、git status に
ターミナル
git statusOn branch main
nothing to commit, working tree clean構文と 主要オプション
| 書き方 | すること |
|---|---|
git reset --soft HEAD~1 | 直前の |
git reset HEAD~1 | 直前の |
git reset --hard HEAD~1 | 直前の |
git reset <ファイル> | その |
git reset --hard <コミットの番号> | 指定した |
失敗時の戻し方
--hard で消えたもの
--hard は、git fsck --lost-found でgit status を
コミットだけを消したとき
コミットは、git reflog で、
ターミナル
git refloga1b2c3d HEAD@{0}: reset: moving to HEAD~1
9f8e7d6 HEAD@{1}: commit: README に説明を足す
a1b2c3d HEAD@{2}: commit (initial): README を作る消した9f8e7d6) へ
ターミナル
git reset --hard 9f8e7d6もう push したとき
push したgit revert で
よくある疑問
reset と revert は どう 使い 分けますか
まだ push していない
ステージから 下ろしたいだけなら、 どれを 使いますか
git restore --staged <ファイル> をgit reset <ファイル> でも
間違えて git reset --hard を 打ってしまいました
消えたgit reflog でgit reset --hard <番号> でgit fsck --lost-found で
