I have been using git reset --soft HEAD^ and git reset --soft HEAD~1 when I want to return my last commit to the staging area. I have been using them interchangeably but was wondering if there were any subtle differences? If there aren't any, can you explain the syntactical difference? Is ^ just an alias for ~1?
HEAD^ and HEAD~1 refer to the same commit.
^ refers to the first parent of the commit. ~n refers to the n:th ancestor. So ^^ (parent-of-parent) is equivalent to ~2.
The main subtlety I can think of is if there is several parents to the current commit (i.e. it is a merge commit). In that case both HEAD^ and HEAD^2 are valid and refer to different commits. HEAD~1 refers to HEAD^ but not HEAD^2
The gitrevisions man page has lots of details and examples.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With