git reset Command
The git reset command is used to revert to a previous version, allowing you to specify a particular commit to revert to.
The syntax for the git reset command is as follows:
git reset [--soft | --mixed | --hard] [HEAD]
--mixed is the default and does not need to be specified. It resets the staging area to match the last commit, while keeping the working directory unchanged.
git reset [HEAD]
Examples:
$ git reset HEAD^ # Revert all content to the previous version
$ git reset HEAD^ hello.php # Revert the hello.php file to the previous version
$ git reset 052e # Revert to the specified version
The --soft parameter is used to revert to a specific version:
git reset --soft HEAD
Example:
$ git reset --soft HEAD~3 # Revert to the version three commits ago
The --hard parameter discards all uncommitted changes in the working directory, resets both the staging area and the working directory to the last commit, and deletes all previous commit information:
git reset --hard HEAD
Example:
$ git reset --hard HEAD~3 # Revert to the version three commits ago
$ git reset –hard bae128 # Revert to a specific version and delete all previous commit information.
$ git reset --hard origin/master # Reset the local state to match the remote repository
Note: Use the --hard parameter with caution, as it deletes all information before the revert point.
HEAD Explanation:
-
HEAD represents the current version.
-
HEAD^ represents the previous version.
-
HEAD^^ represents the version before the previous one.
-
HEAD^^^ represents the version three commits ago.
-
And so on...
-
HEAD~0 represents the current version.
-
HEAD~1 represents the previous version.
-
HEAD^2 represents the version before the previous one.
-
HEAD^3 represents the version three commits ago.
-
And so on...
git reset HEAD
The git reset HEAD command is used to unstage content.
Let's modify the README file with the following content:
# tutorialpro Git Test
# tutorialpro.org
And modify the hello.php file to:
<?php
echo 'tutorialpro.org: www.tutorialpro.org';
echo 'tutorialpro.org: www.tutorialpro.org';
echo 'tutorialpro.org: www.tutorialpro.org';
?>
Now, after both files have been modified and staged, we want to unstage one of them. The operation is as follows:
$ git status -s
M README
M hello.php
$ git add .
$ git status -s
M README
M hello.php
$ git reset HEAD hello.php
Unstaged changes after reset:
M hello.php
$ git status -s
M README
M hello.php
Now, when you execute git commit, only the changes to the README file will be committed, and hello.php will not be included.
$ git commit -m 'Modify'
[master f50cfda] Modify
1 file changed, 1 insertion(+)
$ git status -s
M hello.php
You can see that the modifications to the hello.php file were not committed.
At this point, we can use the following command to commit the changes to hello.php:
$ git commit -am 'Modify hello.php file'
[master 760f74d] Modify hello.php file
1 file changed, 1 insertion(+)
$ git status
On branch master
nothing to commit, working directory clean
In summary, execute git reset HEAD to unstage changes that were previously added with git add, but do not want to be included in the next commit snapshot.