乐趣区

关于git: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 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
重置后勾销暂存的变更:M    readme.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…

退出移动版