If you add a file to staging area and want to undo the action, use below command :
# Undo add action for a file
# --, the following parameter will be parsed as a file path
$ git reset HEAD -- <file-path>
# Undo add action for index.php
$ git reset -- index.php
If you want to undo
add action for all files added to staging area :
$ git reset HEAD
git status tells you how to unstage a file :
$ git add index.php
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
Undo a commit in Git. Last updated: 2018-12-14
Undo a commit that hasn’t been push yet
If you made some mistakes in a commit, you can redo it in a new commit using
--amend option. Just fix your mistakes, stage(add) them and make a new commit as below:
# Redo the last commit.
# --amend, replace the last commit with a new one.
$ git commit --amend
If above solution does not suit you,
reset can be used to just undo the commit (be careful to use reset):
# Discard the last commit. The commit's modifications in working tree are kept.
$ git reset HEAD~
# Discard the last commit. The commit's modifications in staging area are kept.
$ git reset --soft HEAD~
# Discard the last commit. The commit's modifications in working tree are not kept.
$ git reset --hard HEAD~
Undo a commit that has been pushed
If a commit has been pushed to the remote repository, changing the history in the remote repository is not a good idea. You can let Git to make a new commit which reverses the modifications in the last commit.
git revert command works for you :
# Reverse a commit.
$ git revert -m 1 HEAD
Afterwards, push it to the remote repository again.
To discard the changes of a file no matter it is staged or not:
# Undo modifications of a file from working tree and index
$ git checkout -- <file>
# Undo modifications of index.php
$ git checkout -- index.php
git status tells you how to undo the changes:
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
stash command is a safer way to discard changes, because it allows you to revert the changes again. See stashing changes for how to use it.
Use below command to show contents of a file in a specific commit:
# Get contents of a file in a specific commit.
# <commit>, specify the commit, such as an commit id.
# <file-path>, file path of relative to the current directory.
$ git show <commit>:<file-path>
# Get contents of asset/css/style.css in commit 8bc723c
$ git show 8bc723c:asset/css/style.css
# Get contents of asset/css/style.css in the parent commit.
$ git show HEAD~:asset/css/style.css
git clean command is used to remove untracked files in the working tree.
To delete all untracked files in the current directory, a safe way is to do 2 steps:
# Step 1, check what files will be deleted.
# -n or --dry-run, show what files will be deleted without actually deleting them.
$ git clean -n -d
# Step2, do actual deleting action.
# Delete untracked files and untracked directories.
# -d, delete untracked dirctories.
# -f, force to delete, if 'clean.requireForce' in Git confiuration is set to false, 'git clean'
# cleans nothing without '-f' option.
$ git clean -f -d
To remove untracked files with or without ignored files:
# Delete only ignored files.
$ git clean -f -X
# Delete untracked files, untracked directories and ignored files.
$ git clean -f -d -x