3

『现学现忘』Git基础 — 35、Git中删除文件 - 繁华似锦Fighting

 1 year ago
source link: https://www.cnblogs.com/liuyuelinfighting/p/16802897.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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 <file>..." to unstage)
        deleted:    delete.html	# 已删除

Untracked files:
  (use "git add <file>..." 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 <file>..." 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__


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK