Git_原理及使用_撤销修改_删除文件
✨✨ 欢迎大家来到小伞的大讲堂✨✨养成好习惯先赞后看哦~所属专栏Git原理与使用小伞的主页xiaosan_bloggitee:许星让 (xu-xingrang) - Gitee.com制作不易点个赞吧谢谢喵1. 撤销修改情况一对于工作区的代码还没有add你当然可以直接删掉你目前在工作区新增的代码像这样kexiyekexiye-VMware-Virtual-Platform:~/git$ cat ReadMe version1 version2 version3 no add ------------------添加的 kexiyekexiye-VMware-Virtual-Platform:~/git$ git status 位于分支 master 尚未暂存以备提交的变更 使用 git add 文件... 更新要提交的内容 使用 git restore 文件... 丢弃工作区的改动 修改 ReadMe 修改尚未加入提交使用 git add 和/或 git commit -a 直接删除代码即可 kexiyekexiye-VMware-Virtual-Platform:~/git$ cat ReadMe version1 version2 version3 kexiyekexiye-VMware-Virtual-Platform:~/git$ git status 位于分支 master 无文件要提交干净的工作区幸亏我们工作效率不高才写了一行代码就发现不行了要是你写了3天一直都没有提交该怎么删掉呢 你自己都忘了自己新增过哪些有同学说我可以git diff xxx一下看看差别在删啊那你肯定又要花3天时间删代码了并且很大的概率还会改出bug。一周过去了你怎么向你的老板交代呢Git其实还为我们提供了更好的方式我们可以使用git checkout - file命令让工作区的文件回到最近一次 add 或 commit 时的状态。 要注意 git checkout -- file 命令中的-很重要切记不要省略一旦省略该命令就变为其他意思了后面我们再说。示例如下kexiyekexiye-VMware-Virtual-Platform:~/git$ cat ReadMe version1 version2 version3 add in this ----------------新增代码 kexiyekexiye-VMware-Virtual-Platform:~/git$ git checkout -- ReadMe kexiyekexiye-VMware-Virtual-Platform:~/git$ cat ReadMe version1 version2 version3情况二已经add但没有commitadd后还是保存到了暂存区呢怎么撤销呢?kexiyekexiye-VMware-Virtual-Platform:~/git$ vim ReadMe kexiyekexiye-VMware-Virtual-Platform:~/git$ cat ReadMe version1 version2 version3 add in this kexiyekexiye-VMware-Virtual-Platform:~/git$ git add ReadMe kexiyekexiye-VMware-Virtual-Platform:~/git$ git status 位于分支 master 要提交的变更 使用 git restore --staged 文件... 以取消暂存 修改 ReadMe让我们来回忆一下学过的 git reset 回退命令该命令如果使用--mixed 参数可以将暂存区的内容退回为指定的版本内容但工作区文件保持不变。那我们就可以回退下暂存区的内容了示例如下:kexiyekexiye-VMware-Virtual-Platform:~/git$ git reset HEAD ReadMe 重置后取消暂存的变更 M ReadMe kexiyekexiye-VMware-Virtual-Platform:~/git$ git status 位于分支 master 尚未暂存以备提交的变更 使用 git add 文件... 更新要提交的内容 使用 git restore 文件... 丢弃工作区的改动 修改 ReadMe 修改尚未加入提交使用 git add 和/或 git commit -a -----------------------------发现暂存区是干净的工作区有修改此时我们回到了情况一此时我们 git checkout --kexiyekexiye-VMware-Virtual-Platform:~/git$ git checkout -- ReadMe kexiyekexiye-VMware-Virtual-Platform:~/git$ cat ReadMe version1 version2 version3情况三已经add并且也commit了不要担心我们可以 git reset --hard HEAD^ 回退到上一个版本不过这是有条件的就是你还没有把自己的本地版本库推送到远程。还记得Git是分布式版本控制系统吗我们后面会讲到远程版本库一旦你推送到远程版本库你就真的惨了……kexiyekexiye-VMware-Virtual-Platform:~/git$ cat ReadMe version1 version2 version3 add in this kexiyekexiye-VMware-Virtual-Platform:~/git$ git add ReadMe kexiyekexiye-VMware-Virtual-Platform:~/git$ git commit -m modify [master 08d10ef] modify 1 file changed, 2 insertions() kexiyekexiye-VMware-Virtual-Platform:~/git$ git reset --hard HEAD^ HEAD 现在位于 67fec9c version3 kexiyekexiye-VMware-Virtual-Platform:~/git$ cat ReadMe version1 version2 version32. 删除文件在 Git中删除也是一个修改操作我们实战一下,如果要删除 file5 文件怎么搞呢如果你这样做了kexiyekexiye-VMware-Virtual-Platform:~/git$ ls file1 file2 file3 file4 file5 ReadMe kexiyekexiye-VMware-Virtual-Platform:~/git$ rm -rf file5但这样直接删除是没有用的反而徒增烦恼git status 命令会立刻告诉你哪些文件被删除了:kexiyekexiye-VMware-Virtual-Platform:~/git$ rm -rf file5 kexiyekexiye-VMware-Virtual-Platform:~/git$ git status 位于分支 master 尚未暂存以备提交的变更 使用 git add/rm 文件... 更新要提交的内容 使用 git restore 文件... 丢弃工作区的改动 删除 file5 修改尚未加入提交使用 git add 和/或 git commit -a此时工作区和版本库就不一致了要删文件目前除了要删工作区的文件还要清除版本库的文件。一般走到这里有两种可能:确实要从版本库中删除该文件不小心删错了对第二种情况很明显误删需要使用git checkout -- [file]来进行恢复很简单,我们刚学过删除也是修改kexiyekexiye-VMware-Virtual-Platform:~/git$ git checkout -- file5 kexiyekexiye-VMware-Virtual-Platform:~/git$ ls file1 file2 file3 file4 file5 ReadMe对于第一种情况很明显是没有删完我们只删除了工作区的文件。这时就需要使用git rm将文件从暂存区和工作区中删除并且 commit:kexiyekexiye-VMware-Virtual-Platform:~/git$ git rm file5 rm file5 kexiyekexiye-VMware-Virtual-Platform:~/git$ git status 位于分支 master 要提交的变更 使用 git restore --staged 文件... 以取消暂存 删除 file5 kexiyekexiye-VMware-Virtual-Platform:~/git$ ls file1 file2 file3 file4 ReadMe kexiyekexiye-VMware-Virtual-Platform:~/git$ git commit -m delete file5 [master 051b573] delete file5 1 file changed, 0 insertions(), 0 deletions(-) delete mode 100644 file5现在file5从版本库中删除了