Git 彻底删除文件?

查看:240
本文介绍了Git 彻底删除文件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

git add b.txt
rm b.txt
git commit -m '删除b.txt文件'

我执行了第三行commit之后提示

On branch master
Changes not staged for commit:
        deleted:    b.txt

no changes added to commit

然后我再git checkout -- b.txt 还能恢复到暂存区?为什么没有彻底删除掉?

解决方案

新手呀。。。写点儿教程呗。。。。。

从原理上说, git 在本地有三个不同的保存文件的位置。

  1. Working tree: 这个代表的就是你能看到的所有文件以及文件夹

  2. index: 这个其实是和下面的版本库一样都保存在.git文件夹里面(在此不讨论保存的格式)

  3. 版本库: 保存了所有提交的版本。

在所有东西都提交之后,WorkingTree、index 区和版本库中最新的提交内容是一模一样的。

git add 的意思是用 WorkingTree中的文件替换/更新index区中的文件。因此git add b.txt之后就是用当前保存的b.txt更新index中的 b.txt 文件。

rm b.txt 仅仅是一条 linux 命令,就是删除文件的意思。对git来说这样只是在WorkingTree中删除了b.txt

git commit 的意思是把 index 中的文件打包起来放入版本库。由于此时b.txt还在 index 区,所以git commit 仍旧会把b.txt更新到版本库中。

Changes not staged for commit:
        deleted:    b.txt

这里显示了当前WorkingTree和index区的区别:
当前WorkingTree中删除了b.txt文件,但是index还存在这个文件。

no changes added to commit

这个提示应该说是一个警告,由于git commit 的意思是把index区的内容打包放入版本库,可是由于之前commit过了,而且没有add新的东西,所以index区的内容和最新提交是一样的,git没有必要再保存一次,所以显示没有东西可以commit

git rm 这条命令的意义是从index区和WorkingTree中删除某个文件,所以git rm b.txt之后index中就没有了b.txt。 就这样

git checkout <branch> 的意思是用branch中最新的提交更新WorkingTree和index区中的内容。由于不可逆,所以如果这两个地方的内容没有提交到版本库的话这条命令会给出提示。
git checkout -- filename的意思是用index区的内容替换WorkingTree的某个文件--是可选的,表明这个参数之后的都是文件名。(因为有些时候分支/Tag有可能与文件重名)

额外附送一条命令。。。
git status 这个的意思是显示 WorkingTree和index区的不同(默认是红色),index和最新已经提交版本的区别(默认是绿色?深绿?)。另外会有提示如果在他们之间相互更新的方法。

这篇关于Git 彻底删除文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆