Git的撤销修改及工作区文件删除

时间:2024-03-07 12:27:36

修改的撤销

相对上一章的版本回退,感觉修改撤销就是包含版本回退。

执行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用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删