• 『现学现忘』Git基础 — 35、Git中删除文件


    1、删除文件说明

    在Git工作目录中要删除某个文件,首先要清楚该文件所处的状态。

    若要是该文件未被Git管理,在工作区直接进行删除即可。(不演示)

    但是,若该文件已经经过多次git addgit commit操作后,就必须要从已跟踪文件清单中删除(确切地说,是在暂存区中删除),然后提交。

    可以用git rm命令完成此项工作,并连带从工作目录中删除指定的文件,这样文件之后就不会出现在未跟踪文件清单中了。

    2、删除文件操作

    (1)仅删除暂存区的文件

    1)创建文件,提交到版本库

    bash
    # 1.创建delete.html文件
    L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
    $ echo "delete file test" >> delete.html
    
    # 2.把delete.html文件提交到本地版本库中
    L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
    $ git add delete.html
    warning: LF will be replaced by CRLF in delete.html.
    The file will have its original line endings in your working directory
    
    L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
    $ git commit -m '新增delete.html文件'
    [master 262df2c] 新增delete.html文件
     1 file changed, 1 insertion(+)
     create mode 100644 delete.html
     
    L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
    $ git status
    On branch master
    nothing to commit, working tree clean

    2)查看暂存区和本地版本库中的文件列表

    bash
    # 1.查看暂存区中的文件列表
    L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
    $ git ls-files
    delete.html
    readme.txt
    
    # 2.查看本地版本库中的文件列表
    L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
    $ git ls-files --with-tree=HEAD
    delete.html
    readme.txt

    我们可以看到暂存区和本地版本库中都是delete.htmlreadme.txt两个文件。

    说明命令:git ls-files --with-tree=HEAD

    该命令实际上查看的是,当前工作分支上,HEAD指针所指向的,时间节点中的文件列表。若查看上一个时间节点中的文件列表,则可将HEAD替换为HEAD^,当然也可以使用HEAD~n

    3)仅删除暂存区中delete.html文件

    使用git rm --cached命令,该命令可以仅删除暂存区中的指定文件。

    bash
    L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
    $ git rm --cached delete.html
    rm 'delete.html'

    4)再次查看暂存区和本地版本库中的文件列表

    bash
    # 1.查看暂存区中的文件列表
    $ git ls-files
    readme.txt
    
    # 2.查看本地版本库中的文件列表
    L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
    $ git ls-files --with-tree=HEAD
    delete.html
    readme.txt

    我们可以看到暂存区中已经没有了delete.html文件,但本地版本库中还存在。

    此时,通过git commit命令进行提交,可以将本地库中的文件文件也删除。

    5)恢复被删除delete.html文件

    此时工作区中的delete.html文件还没有被删除,如下:

    bash
    # 也可以使用ll命令查看
    L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
    $ git status
    On branch master
    Changes to be committed:
      (use "git restore --staged ..." to unstage)
            deleted:    delete.html	# 已删除
    
    Untracked files:
      (use "git add ..." to include in what will be committed)
            delete.html	# 未被追踪

    此时最简单的恢复方式是,将delete.html文件git add到暂存区,再git commit提交到本地版本库中。(我的理解是,把delete.html文件添加到暂存区,这一步就让delete.html文件恢复了,因为此时工作区,暂存区,版本库中的delete.html文件都是一样的。在执行git commit提交,也没有什么意思了。大家可以自己也思考一下。)

    下面我们使用git reset命令进行恢复。

    执行命令git reset HEAD,即执行的完全命令为git reset --mixed HEAD

    bash
    # 1.版本回退
    L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
    $ git reset HEAD
    
    # 2.查看暂存区中的文件列表
    L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
    $ git ls-files
    delete.html
    readme.txt
    
    L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
    $ git status
    On branch master
    nothing to commit, working tree clean

    可以看到暂存区中的delete.html文件已恢复。

    (2)完全删除文件

    所谓完全删除文件,指的是将工作区、暂存区和本地库中的指定文件一次性都删除。

    1)删除delete.html文件

    使用命令git rm filename

    bash
    # 接上面示例
    # 1.完全删除delete.html文件
    L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
    $ git rm delete.html
    rm 'delete.html'
    
    # 2.查看暂存区中的文件列表
    L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
    $ git ls-files
    readme.txt
    
    # 3.查看本地版本库中的文件列表
    L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
    $ git ls-files --with-tree=HEAD
    delete.html
    readme.txt
    
    # 4.查看工作区中的文件列表
    L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
    $ ll
    total 1
    -rw-r--r-- 1 L 197121 80  4月 15 17:34 readme.txt
    
    # 5.查看工作目录中的文件状态
    L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
    $ git status
    On branch master
    Changes to be committed:
      (use "git restore --staged ..." to unstage)
            deleted:    delete.html

    我们可以工作区和暂存区中的delete.html文件都已经被删除,但是本地版本库中的delete.html文件还存在。

    我们查看了当前工作目录中的文件状态,发现delete.html文件是已删除状态。

    因此若要将本地版本库中的delete.html文件删除,直接commit提交即可。

    bash
    # 提交操作
    L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
    $ git commit -m '删除 delete.html文件'
    [master fdcb771] 删除 delete.html文件
     1 file changed, 1 deletion(-)
     delete mode 100644 delete.html
    
    L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
    $ git status
    On branch master
    nothing to commit, working tree clean
    
    # 查看工作目录文件
    L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
    $ ll
    total 1
    -rw-r--r-- 1 L 197121 80  4月 15 17:34 readme.txt

    说明delete.html文件已经被彻底删除了。

    3、本文用到的命令总结

    • git ls-files:查看暂存区中的文件列表。
    • git ls-files --with-tree=HEAD:查看本地版本库中的文件列表。(文中有使用说明)
    • git rm --cached filename:仅删除暂存区中的文件。
    • git rm filename:删除工作区和暂存区的文件。

    __EOF__

  • 本文作者: 繁华似锦的博客
  • 本文链接: https://www.cnblogs.com/liuyuelinfighting/p/16802897.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    设计模式学习笔记 - 面向对象 - 9.实践:如何进行面向对象分析、设计与编码
    单源最短路的简单应用
    关于windows上运行bitsandbytes老是报错的(说cuda版本有问题)解决方案
    Python大数据之pandas快速入门(一)
    SRP:单一职责原则
    MySql优化
    KubeSphere安装redis集群,全程超带劲
    Aimi.fm:AI的生成音乐平台
    liux常用命令(查看及其开放防火墙端口号+查看及其杀死进程)
    从零开始学微服务学习笔记(八)
  • 原文地址:https://www.cnblogs.com/liuyuelinfighting/p/16802897.html