要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。 可以用 git rm
命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。
git rm
Git 中用来删除文件的命令。它不仅会删除工作区中的文件,还会将文件的删除操作记录到 Git 的暂存区(staging area)。如果你删除了文件但没有执行 git rm
,Git 只会认为这个文件在工作区被删除,但不会将其删除操作记录到暂存区,直到你手动添加该变化。
直接删除被跟踪文件的效果
rm A.c
git status
On branch master
Your branch is up to date with 'origin/master'.
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
deleted: A.c
git add A.c ## 将此次被删除的文件增加到暂存区
git status
On branch master
Your branch is up to date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: A.c
使用git rm
来删除文件
git rm B.c
rm 'B.c'
git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: B.c
特殊情形一
如何我们将任何一个文件被增加到暂存区后,然后使用 git rm
必须使用的-f
选项。
touch C.c## 新建一个文件
echo "this is C.c file" >> C.c
git add C.c
git status
On branch master
Your branch is up to date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: C.c
root@osboxes:/home/user/my_project# git rm C.c
error: the following file has changes staged in the index:
C.c
(use --cached to keep the file, or -f to force removal)
git rm -f C.c ###删除文件
特殊情形二
想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。 换句话说,你想让文件保留在磁盘,但是并不想让 Git 继续跟踪。 当你忘记添加 .gitignore
文件,不小心把一个很大的日志文件或一堆 .a
这样的编译生成文件添加到暂存区时,这一做法尤其有用。 为达到这一目的,使用 --cached
选项
touch D.c
root@osboxes:/home/user/my_project# echo "this is D.c file" >> D.c
root@osboxes:/home/user/my_project# git add D.c
root@osboxes:/home/user/my_project# git status
On branch master
Your branch is up to date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: D.c
root@osboxes:/home/user/my_project# git commit
git rm --cached D.c ## 这种情况删除后,D.c 文件会被保留
git commit -m "deleted D.c"
ls
D.c ## D.c 文件会被保留,而不会被删除
Tags:
Git教程