事象 : 2つめのコミットをリセットしようとしたら失敗した
# 1. プシュっていないコミットが2つあって、2つともコミットを取り消したい
$ git log origin/master..master
Merge: 45... 89...
Author: macOS <ponsuke@example.com>
Date: Fri Jan 22 21:26:17 2021 +0900
Merge branch 'master' of https://github.com/{ユーザ}/{リポジトリ} into master
commit 45...
Author: macOS <ponsuke@example.com>
Date: Fri Jan 22 20:35:04 2021 +0900
こみっとこめんと
# 2. 1つ取り消して・・・
$ git reset --soft HEAD^
# 3. もう1つも取り消そうとしたら
$ git log origin/master..master
commit 45... (HEAD -> master)
Author: macOS <ponsuke@example.com>
Date: Fri Jan 22 20:35:04 2021 +0900
こみっとこめんと
# 4. 怒られた
$ git reset --soft HEAD^
fatal: ambiguous argument 'HEAD^': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
原因 : HEAD^のってどれのことやねん!という状態
「えっ?一個前のコミット・・・」
# HEADを確認したら・・・
$ git reflog
45ea498 (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
d5f1e7f HEAD@{1}: pull --allow-unrelated-histories: Merge made by the 'recursive' strategy.
45ea498 (HEAD -> master) HEAD@{2}: commit (initial): こみっとこめんと
対応 : HEADを使わないでどこまでリセットしたいかちゃんと伝える
# 1. originまで戻してね
$ git reset --soft origin/master
# 2. プシュしてないコミットは無くなりました。
$ git log origin/master..master
$
複数のコミットはいっきに取り消しましょう、面倒です。
コミットを指定するときに、~(チルダ)と^(キャレット)を使ってあるコミットからの相対位置で指定することもできます。この時に、よく使われるのがHEADです。~(チルダ)を後ろに付け加えることで何世代前の親かを指定することができます。^(キャレット)は、ブランチのマージで親が複数ある場合に、何番目の親かを指定することができます。
ブランチの切り替え|サル先生のGit入門【プロジェクト管理ツールBacklog】