修改的撤销
相对上一章的版本回退,感觉修改撤销就是包含版本回退。
执行git status
命令可以了解到工作区文件修改的状态,来选择撤销修改的方法。
- 假设现在要撤回修改的文件版本并没有添加到暂存区上:(撤销工作区修改版本)
可以执行git checkout -- file
可以把file文件在工作区的修改全部撤销,回退的版本文件有两种可能:
第一种是自file
文件修改后没有add
到过暂存区stage上,此时修改撤销后,文件file
会回退与上次commit
到分支时一模一样的状态。
第二种是file
已经添加到暂存区后,又作了修改,此时修改撤销后,文件file
会回退与添加暂存区时一模一样的状态。
eg :
E:\Git>git checkout -- Hello,Seiei.txt
注:命令中的--
很重要,没有--
,就变成了“切换到另一个分支”的命令,而且--
后跟一个空格键。
- 假设现在想要撤回的修改版本由添加到暂存区上了,此时就不能使用
git check -- file
命令了:(撤销暂存区修改版本)
可以使用git reset HEAD file
命令,将暂存区上的修改撤销掉,撤销掉的修改版本会重新返回工作区。所以此时执行git status
会显示工作区文件有修改,但没有上传到暂存区的信息(即暂存区干净,而工作区有修改)。
把上传到暂存区的修改版本清除后,就可以使用git checkout -- file
命令把工作区的要撤回修改的版本也清除掉,回退到上次commit
分支时的状态。
eg:
E:\Git>git reset HEAD Hello,Seiei.txt #清除暂存区
Unstaged changes after reset:
M Hello,Seiei.txt
E:\Git>git check -- Hello,Seiei.txt #清除工作区
E:\Git>git status #查看结果
On branch master
nothing to commit, working tree clean
- 假设现在想要撤回的修改版本已经提交到分支上,此时就可以使用上一章版本回退的方法了:(撤销分支修改版本)
使用git reset --hard commit_id
命令。
eg:
E:\Git>git reset --hard 09cde
文件的删除
在Git中,工作区文件的删除相对于Git也是一个修改操作。
假如私自在文件目录(即工作区)下删除文件,此时在Git上执行git status
命令,就会显示此时工作区状态与版本库的不一致了。
而之后的具体操作其实与其他的存储或撤销版本修改的操作一样。
只是添加到暂存区时运用的是git rm file
命令,而提交还是git commit -m info
命令,撤销修改即撤销删除还是git checkout -- filename
命令。
总结:
Git的撤销:
场景1:当你改乱了工作区的文件内容想直接丢弃工作区修改时,可用
git checkout -- file
命令场景2:当不仅改乱了工作区还添加到暂存区时,分两步解决,第一步:使用
git reset HEAD
命令, 回到场景1,第二步:使用git checkout -- file
命令(也可以直接使用版本回退)场景3:在场景2的前提下还上交到分支时,直接使用
git reset --hard commit_id
工作区文件的删除:
- 在Git中,工作区文件的删除相对于Git也是一个修改操作。命令
git rm file
用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删