Difference between git reset --hard HEAD^ vs git reset --hard HEAD?

git, github

Solution

`HEAD^` is the parent commit of `HEAD`.

If you want to go into details, then `ref^` is the shortcut for `ref^1` where `ref^1` is the commit's first parent (`ref^2` is the commit's second parent, which may be absent if the commit is not a merge commit).

There is also `ref~` which is also commit's first parent. It is also a shortcut for `ref~1`. But the difference between `ref^2` and `ref~2` is that `ref~2` is commit's first parent's first parent. There can be `ref~1`, `ref~2`, ..., `ref~n` (if the history is long enough).

As for the `git reset` - it resets the current branch to the commit you specify (`--hard` means to discard both index and working tree changes). `git reset --hard HEAD^` resets the current branch one commit backward, while `git reset --hard HEAD` just discards all local changes.

Problem

What does the `^` in `git reset --hard HEAD^` do versus just `git reset --hard HEAD` Is there a difference?

Original source

Related problems