Git管理修改、撤销和删除文件

备注: 本文参考于廖雪峰老师的博客Git教程。依照其博客进行学习和记录,感谢其无私分享,也欢迎各位查看原文。
知识点

  • Git跟踪和管理的的是修改,而不是文件
  • git checkout -- file,会将文件撤销到和git add时的状态一样,即git checkout -- file会将工作区的文件撤销到与暂存区(stage)一致
  • git checkout -- file命令中,如果没有--,就变成了“切换到另一个分支”的命令
  • git reset HEAD file既可以回退版本,也可以把添加到暂存区的修改回退到工作区,HEAD表示最新版本
  • 删除文件,git rm file,git commit -m"..."
管理修改 Git不同于其他版本控制系统,Git跟踪和管理的的是修改,而不是文件
新增一行、删除一行、修改字符、删除又增加内容、创建新文件等,都是修改
Git通过提交放入暂存区的修改,用来管理修改,而不是管理原文件。
## 撤销修改
在实际中,(虽然不常发生)总是会出现发生一些问题需要撤销修改。
  • 比如:在文件中添加一行无意义的特殊字符
liu@liu-virtual-machine:~/gitTest$ cat readme.txt`this is a test that I learning and use git version control system this is a beginning i Add a new line information in the end of readme.txt file $%^%&^*&&(**)(*)*&^*(*&&*&YTRYYIN

没有git add添加到暂存区时的撤销
  • 此时,查看git status如下:
liu@liu-virtual-machine:~/gitTest$ git status 位于分支 master 尚未暂存以备提交的变更: (使用 "git add <文件>..." 更新要提交的内容) (使用 "git checkout -- <文件>..." 丢弃工作区的改动)修改:readme.txt修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

  • 【Git管理修改、撤销和删除文件】Git提示,git checkout -- file可以丢弃工作区的改动
    git checkout -- readme.txt

git checkout -- readme.txt会把readme.txt文件在工作区的修改全部撤销。
git checkout -- file,会将文件撤销到和git add时的状态一样,即git checkout -- file会将工作区的文件撤销到与暂存区(stage)一致
git checkout -- file作用在暂存区(stage),当git add添加到暂存区后,git status不在显示git checkout -- file命令提示
可自行测试
  • 此时文件内容就回到了原来状态
$ cat readme.txt`this is a test that I learning and use git version control system this is a beginning i Add a new line information in the end of readme.txt file

git checkout -- file命令中,如果没有 --,就变成了“切换到另一个分支”的命令
git add添加到暂存区后的撤销
当我们git add后,发现需要撤销,此时查看git status状态
$ git status 位于分支 master 要提交的变更: (使用 "git reset HEAD <文件>..." 以取消暂存)修改:readme.txt

Git提示,使用 git reset HEAD file可以把添加到暂存区的修改撤销(unstage
$ git reset HEAD readme.txt 重置后取消暂存的变更: Mreadme.txt

  • git reset 既可以回退版本,也可以把添加到暂存区的修改回退到工作区,HEAD表示最新版本
  • 此时查看git status,暂存区没有修改,是干净的,工作区有修改。
$ git status 位于分支 master 尚未暂存以备提交的变更: (使用 "git add <文件>..." 更新要提交的内容) (使用 "git checkout -- <文件>..." 丢弃工作区的改动)修改:readme.txt修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

  • 现在可以使用git checkout -- readme.txt丢弃工作区的修改。然后查看,修改的文件已经回到原来状态
$ git checkout -- readme.txt $ cat readme.txt`this is a test that I learning and use git version control system this is a beginning i Add a new line information in the end of readme.txt file

撤销成功
git commit提交后的撤销
对于已经commit提交到版本库的撤销,可以使用版本回退更改。
如果你提交了远程仓库,则需要另行处理。
删除文件 Git中,删除也是一个修改操作.
首先新建一个test.txt文件,添加并提交到仓库
  • 当我们把目录下的文件删除后
$ rm test.txt

  • 此时,工作区和版本库变得不一致
$ git status 位于分支 master 尚未暂存以备提交的变更: (使用 "git add/rm <文件>..." 更新要提交的内容) (使用 "git checkout -- <文件>..." 丢弃工作区的改动)删除:test.txt修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

git status指出删除了test.txt文件。
  • 现在有两种操作:1、确定从版本库中删除文件,2、从暂存区把误删的文件恢复
确定从版本库中删除文件
  • 使用git rm删除文件并git commit提交
$ git rm test.txt rm 'test.txt' $ git status 位于分支 master 要提交的变更: (使用 "git reset HEAD <文件>..." 以取消暂存)删除:test.txt$ git commit -m"remove test.txt" [master 6a0f133] remove test.txt 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 test.txt $ git status 位于分支 master 无文件要提交,干净的工作区

从暂存区把误删的文件恢复
  • 使用git checkout -- file从暂存区恢复误删的文件(本质还是丢弃工作区的改动)
$ git checkout -- test.txt

参考 Git教程:https://www.liaoxuefeng.com/w...

    推荐阅读