主要使用的命令:git reset HEAD、git checkout
[root@localhost hd]# touch i.php
[root@localhost hd]# git status
# 位于分支 master
# 未跟踪的文件:
# (使用 "git add <file>..." 以包含要提交的内容)
#
# i.php
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
步骤解释:创建一个i.php文件,查看工作区状态,这时可以看见i.php文件还没add加入缓存区
[root@localhost hd]# git add .
[root@localhost hd]# git status
# 位于分支 master
# 要提交的变更:
# (使用 "git reset HEAD <file>..." 撤出暂存区)
#
# 新文件: i.php
#
解释:这时 , i.php文件还未commit提交 , 只是add加入到了缓存区可以提交变更
[root@localhost hd]# vi i.php
[root@localhost hd]# git status
# 位于分支 master
# 要提交的变更:
# (使用 "git reset HEAD <file>..." 撤出暂存区)
#
# 新文件: i.php
#
# 尚未暂存以备提交的变更:
# (使用 "git add <file>..." 更新要提交的内容)
# (使用 "git checkout -- <file>..." 丢弃工作区的改动)
#
# 修改: i.php
#
解释: 修改了i.php后,查看工作区状态显示i.php这个文件有两个变更 ,
1.暂存区i.php可以commot提交,
2.对i.php文件的修改还未add加入到暂存区
下面来试试 , "git reset HEAD <file>..." 撤出暂存区
[root@localhost hd]# git reset HEAD i.php
[root@localhost hd]# git status
# 位于分支 master
# 未跟踪的文件:
# (使用 "git add <file>..." 以包含要提交的内容)
#
# i.php
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
[root@localhost hd]# cat i.phpdsfasdfa
解释:可以看到,执行完git reset HEAD i.php命令后 , i.php 撤出暂存区了 , 但是i.php文件修改的内容没有影响 , 只是撤出暂存区
[root@localhost hd]# git add .
[root@localhost hd]# git commit -m "首次提交i.php文件"
[root@localhost hd]# vi i.php
[root@localhost hd]# cat i.php
dsfasdfa
新增内容:哈哈哈哈
[root@localhost hd]# git status
# 位于分支 master
# 尚未暂存以备提交的变更:
# (使用 "git add <file>..." 更新要提交的内容)
# (使用 "git checkout -- <file>..." 丢弃工作区的改动)
#
# 修改: i.php
#
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
[root@localhost hd]#
解释:重新把i.php加入暂存区并commit提交了之后再次修改一下文件内容,查看工作区状态,i.php的修改还未加入到暂存区
来使用"git checkout -- <file>..." 丢弃工作区的改动
[root@localhost hd]# git checkout -- i.php
[root@localhost hd]# cat i.php
dsfasdfa
解释:可以看到,对i.php文件的修改还未加入缓存区并提交的i.php,重新git checkout后已经回退到版本库的版本了,修改的内容不在了