Когда вы спрашиваете git о git reset --soft HEAD~1
, , вы (никто другой) просите, чтобы git поместил указатель ветки на данную ревизию (HEAD ~ 1), которая в этом случае заканчивается ревизией 3. Возможно, вы слили ревизию 2, стоящую поверх ревизии 3, поэтому в ревизии первым родителем будет 3, и поэтому HEAD ~ 1 будет указывать на ревизию 3.
Если вы попросите git ввести git reset --soft 2
(укажите идентификатор редакции для редакции 2), вы получите 0 - 1 - 2
. Решает не мерзавец, а ты, выполнив эту команду.