1、刪除文件說明
在Git工作目錄中要刪除某個文件,首先要清楚該文件所處的狀態。
若要是該文件未被Git管理,在工作區直接進行刪除即可。(不演示)
但是,若該文件已經經過多次git add
與git commit
操作後,就必須要從已跟蹤文件清單中刪除(確切地說,是在暫存區中刪除),然後提交。
可以用git rm
命令完成此項工作,並連帶從工作目錄中刪除指定的文件,這樣文件之後就不會出現在未跟蹤文件清單中了。
2、刪除文件操作
(1)僅刪除暫存區的文件
1)創建文件,提交到版本庫
# 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)查看暫存區和本地版本庫中的文件列表
# 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.html
和readme.txt
兩個文件。
說明命令:
git ls-files --with-tree=HEAD
該命令實際上查看的是,當前工作分支上,HEAD指針所指向的,時間節點中的文件列表。若查看上一個時間節點中的文件列表,則可將HEAD替換爲
HEAD^
,當然也可以使用HEAD~n
。
3)僅刪除暫存區中delete.html
文件
使用git rm --cached
命令,該命令可以僅刪除暫存區中的指定文件。
L@DESKTOP-T2AI2SU MINGW64 /j/git-repository/learngit (master)
$ git rm --cached delete.html
rm 'delete.html'
4)再次查看暫存區和本地版本庫中的文件列表
# 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
文件還沒有被刪除,如下:
# 也可以使用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
。
# 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
。
# 接上面示例
# 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提交即可。
# 提交操作
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
:刪除工作區和暫存區的文件。