8

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

ahtmatrix
  • 539
  • 1
  • 7
  • 19
  • 3
    See http://stackoverflow.com/questions/2304087/what-is-head-in-git and http://stackoverflow.com/questions/2221658/whats-the-difference-between-head-and-head-in-git – torek Oct 19 '16 at 21:16

1 Answers1

15

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.

Paul
  • 13,042
  • 3
  • 41
  • 59