How to cancel a local git commit?

Question

My issue is I have changed a file e.g.: README, added a new line 'this for my testing line' and saved the file, then I issued the following commands:

git status

On branch master

Changed but not updated:

(use “git add <file>…” to update what will be committed)

(use “git checkout – <file>…” to discard changes in working directory)

modified: README

no changes added to commit (use “git add” and/or “git commit -a”)

git add README

git commit -a -m ‘To add new line to readme’

I didn't push the code to GitHub. Now I want to cancel this commit.

For this, I used

git reset --hard HEAD~1

But I lost the newly added line 'this for my testing line' from the README file. This should not happen. I need the content to be there. Is there a way to retain the content and cancel my local commit?

Answer

Just use git reset without the --hard flag:

git reset HEAD~1

PS: On Unix based systems you can use HEAD^ which is equal to HEAD~1. On Windows HEAD^ will not work because ^ signals a line continuation. So your command prompt will just ask you More?.

Git: Set local user.name and user.email different for each repo

Explain which gitignore rule is ignoring my file