git学习 撤销修改 / 删除文件(第四天)

今天(7月4号),菜鸟总算硬着头皮,纯自己敲了一次js的单链表,虽然其中有点小错误,但最起码跨出了不敢敲的这一步,等一下菜鸟还要去敲,毕竟这种程度,不可能进大厂,而且我敲的还只是最简单的增删改查而已!

然后,下午和晚上,都直接被B站吸星大法吸了,浪费一天 (≧ ﹏ ≦) 。其实单词也因为在亲戚家,所以找理由鸽了几天了,没有向我妹打卡了 /(ㄒoㄒ)/~~

现在已经是7月5号了,难受 (≧ ﹏ ≦) ,今天好好搞吧!话不多说,开始学习之旅!

删除文件

咳咳咳,这里菜鸟倒着写,是因为昨天,直接使用vim修改的gittwo,结果还没修改和保存,就被我直接叉掉了,于是文件夹里就多了一个叫 .gittwo.swp 的文件。

菜鸟看着这个文件,自然是先百度,有兴趣的读者可以看看 linux下.swp文件是什么?

今天,菜鸟准备写撤销修改的时候,自然得先修改gittwo对吧?那么问题就来了,我先删了 .gittwo.swp ,现在修改 gittwo 反而让 git bash 出了点小问题,所以菜鸟直接删掉 gittwo 重新再来就算了!

在Git中,删除也是一个修改操作!

一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了:

rm gittwo

这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status 命令会立刻告诉你哪些文件被删除了:

On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        deleted:    gittwo

no changes added to commit (use "git add" and/or "git commit -a")

这里菜鸟发现两种删除方式,都没有什么问题,如果有问题,望读者积极反馈!

一、修改式删除

细心的读者会发现 no changes added to commit (use “git add” and/or “git commit -a”) 正好和修改文件的提示一样!

所以菜鸟直接自以为事进行了,git add gittwo 的操作,而git也很给面子,没有任何反应,然后菜鸟就继续 git commit -m “remove gittwo2”,显示如下:

[master 90293e6] remove gittwo2
 1 file changed, 1 deletion(-)
 delete mode 100644 gittwo

接下来,使用 git status ,结果如下:

On branch master
nothing to commit, working tree clean

再使用 git log 也发现版本名称出现了:

commit 90293e68a5dd36516fa289b94625f77ee21f640f (HEAD -> master)
Author: *************
Date:   Sun Jul 5 15:06:06 2020 +0800

    remove gittwo2

二、快速删除

相较于上面的那种,我感觉这种更加快速和方便,你根本都不需要使用 rm gittwo 或者 去文件夹删除,直接使用 git rm gittwo ,结果如下:

rm 'gittwo'

此时,git status,结果如下:

On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        deleted:    gittwo

直接就是 Changes to be committed ,表示你可以直接提交了。然后使用git commit -m “remove gittwo3”,结果如下:

[master b1b3c50] remove gittwo3
 1 file changed, 1 deletion(-)
 delete mode 100644 gittwo

再用git log查看,也出现了版本名称:

commit b1b3c50c4cf6a3be72ad11433713008ccdc6fc45 (HEAD -> master)
Author: **************
Date:   Sun Jul 5 15:15:45 2020 +0800

    remove gittwo3

注意

一、如果你是用 rm gittwo 或者 去文件夹删除,也可以使用第二个方法,出现的结果也完全一样

二、如果你在git rm gittwo,之后使用git add gittwo,也就是模仿上一种方法,会报错:

fatal: pathspec 'gittwo' did not match any files

三、删除的文件夹时,得使用git rm -r .filename,因为得递归删除目录,否则只能删除文件(2020年8月2日补)

三、错删(撤销修改)

另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:

一、使用rm < file > 或 去文件夹删除

如果读者是通过 rm gittwo 或 去文件夹删除 这种方式删除的,那么通过提示应该就知道如何恢复(在 git add 之前):

On branch master
Changes not staged for commit:
(use “git add/rm < file>…” to update what will be committed)
(use “git restore < file>…” to discard changes in working directory)
deleted: gittwo
no changes added to commit (use “git add” and/or “git commit -a”)

菜鸟按照上面的打, git restore gittwo 或者 git checkout – gittwo,果然恢复了,如果 git add 之后呢?

On branch master
Changes to be committed:
(use “git restore --staged < file>…” to unstage)
deleted: gittwo

按照这样打,git restore --staged gittwo,也是可以恢复的,不过还是没反应,需要你自己 git status 来看!而通过 git checkout – gittwo 就会报错

error: pathspec 'gittwo' did not match any file(s) known to git

二、使用git rm < file >

如果读者是通过 git rm gittwo 这种方式删除的,那么通过提示恢复不了

On branch master
Changes to be committed:
(use “git restore --staged < file>…” to unstage)
deleted: gittwo

菜鸟是按照这样打的 git restore --staged gittwo ,但是没有用(其实有用,菜鸟当时忘记 git status 了),文件并没有回来!然后菜鸟又试着上面的 git restore gittwo ,结果报错了:

error: pathspec 'gittwo' did not match any file(s) known to git

然后我按照别人的

 git checkout -- gittwo

依旧报错:

error: pathspec 'gittwo' did not match any file(s) known to git

菜鸟彻底懵逼了!

(这里的操作是错误的,具体见下面)

注意

菜鸟发现一旦git执行到了

On branch master
Changes to be committed:
  (use "git restore --staged < file>..." to unstage)
        deleted:    gittwo

那么

git checkout -- gittwo

就是没有什么效果的!只能通过 git restore 才能恢复!

经过菜鸟的认真研究和搜索,发现了问题所在:

git checkout 这个命令承担了太多职责,既被用来切换分支,又被用来恢复工作区文件,对用户造成了很大的认知负担。


Git社区发布了Git的新版本2.23。在该版本中,有一个特性非常引人瞩目,就是新版本的Git引入了两个新命令 git switch 和 git restore,用以替代现在的 git checkout。换言之,git checkout 将逐渐退出历史舞台。


所以现在还是请大家主要使用 git restore ,而不是checkout!

文章链接

撤销修改

突然发现上面的删错的处理操作就有一部分是撤销修改,😂,困扰我这么久的问题,其实在撤销修改里面有提及,醉了<@_@>,但最起码菜鸟现在对这印象深刻!

这里就小结一下:

一、

命令git checkout – file意思就是,把文件在工作区的 修改 全部撤销,这里有两种情况:

  • 一种是文件自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态

  • 一种是文件已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态

总之,就是让这个文件回到最近一次git commit或git add时的状态

注意:git checkout – file命令中的–很重要,没有–,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout命令。

git restore 表示将在工作空间但是 不在暂存区 的文件撤销更改

(两者作用基本一样)

二、

用命令git reset HEAD < file>可以把暂存区的修改撤销掉(unstage),重新放回工作区:

Unstaged changes after reset:
M       text

git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本

再用git status查看一下,现在暂存区是干净的,工作区有修改:

On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   text

no changes added to commit (use "git add" and/or "git commit -a")

git restore --staged < file>作用是将暂存区的文件从暂存区撤出,但不会更改文件。(也得用 git status查看,不然没反应,菜鸟上面就是以为没用)

(两者作用一样)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PBitW

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值