Git删除暂存区或版本库中的文件

故事前提

小明今天遇到了一个bug,莫名奇妙改着改着就乱了,万分后悔,一心想回退到之前的版本重新开始,不过庆幸的是使用了git托管,一起来看看git作为管理工具的强大之处吧。

基础
Git有三大区(工作区、暂存区、版本库)以及几个状态(untracked、unstaged、uncommited),下面只是简述下Git的大概工作流程,详细的可以参见其他有关Git的文章。

  • 打开你的项目文件夹,除了隐藏的.git文件夹,其他项目文件位于的地方便是工作区,工作区的文件需要添加到Git的暂存区(git add),随后再提交到Git的版本库(git commit)。
  • 首次新建的文件都是untracked状态(未跟踪),此时需要git add到暂存区,Git便会在暂存区中生成一个该文件的索引,文件此时处于uncommited状态,需要git commit生成版本库。添加到了版本库之后,再对文件进行修改,那么文件的状态会变为unstaged状态。
    简单的认识了Git的工作流程,接下来便可以看看如何删除错误添加到暂存区或版本库里的文件了!

删除错误添加到暂存区的文件
有时你在工作区新建了文件TestFile,并且已经将它添加到了暂存区,git会告知,现有有一个文件未提交到版本库,如下图:
在这里插入图片描述

仅仅删除暂存区里的文件
此时你想撤销错误添加到暂存区里的文件,可以输入以下命令:
git rm --cache 文件名
在这里插入图片描述
清空缓存区所有文件,执行以下命令:
git rm --cache .

上面的命令仅仅删除暂存区的文件而已,不会影响工作区的文件,如上图,TestFile.txt仍然存在,此时输入下面命令,git会告知有一个未跟踪的文件TestFile.txt。
git status

删除暂存区和工作区的文件
git rm -f 文件名
工作区的文件也被删除了。
在这里插入图片描述

删除错误提交的commit
有时,不仅添加到了暂存区,而且commit到了版本库,这个时候就不能使用git rm了,需要使用git reset命令。
错误提交到了版本库,此时无论工作区、暂存区,还是版本库,这三者的内容都是一样的,所以在这种情况下,只是删除了工作区和暂存区的文件,下一次用该版本库回滚那个误添加的文件还会重新生成。
这个时候,我们必须撤销版本库的修改才能解决问题!
git reset有三个选项,–hard、–mixed、–soft。

# 仅仅只是撤销已提交的版本库,不会修改暂存区和工作区
git reset --soft 版本库ID
# 仅仅只是撤销已提交的版本库和暂存区,不会修改工作区
git reset --mixed 版本库ID
# 彻底将工作区、暂存区和版本库记录恢复到指定的版本库
git reset --hard 版本库ID

那我们到底应该用哪个选项好呢?

  • 如果你是在提交了后,对工作区的代码做了修改,并且想保留这些修改,那么可以使用git reset --mixed 版本库ID,注意这个版本库ID应该不是你刚刚提交的版本库ID,而是刚刚提交版本库的上一个版本库。如下图:
  • 如果不想保留这些修改,可以直接使用彻底的恢复命令,git reset --hard 版本库ID。
  • 为什么不使用–soft呢,因为它只是恢复了版本库,暂存区仍然存在你错误提交的文件索引,还需要进一步使用上一节的删除错误添加到暂存区的文件,详细见上文。
    在这里插入图片描述

本文转载至Git删除暂存区或版本库中的文件

如有侵权,请联系 我 删除。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Git中,主要有三个区域: 1. **工作区(Working Directory)**[^1]:这是你在本地计算机上实际查看和编辑文件的地方。当你从仓库克隆项目或切换分支后,工作区的内容会更新为你选择的分支状态。 2. **暂存区(Staging Area/Index)**:也称为索引区,位于 `.git/index` 文件中。当你运行 `git add <file>` 命令时,你所做的更改会被添加到暂存区,准备被提交到版本控制。只有暂存区中的修改才会被包括在下一次的 `git commit` 中。 3. **本地仓库(Local Repository)**:存储着项目的完整历史记录,包括提交信息、分支等。你可以通过 `git clone` 克隆一个远程仓库来创建本地仓库,然后使用 `git commit` 和 `git push` 进行版本管理。 **示例操作流程:** 1. 修改工作区文件 `test_1.txt`。 2. 使用 `git add test_1.txt` 将修改添加到暂存区。 3. 如果还想添加其他文件,可以使用 `git add ./*` 来一次性添加当前目录下的所有改动。 4. 对不需要的改动执行 `git rm test_2.txt`(如果它还未被暂存),并可能需要加上 `-r` 参数来递归删除文件及其子目录。 5. 当对暂存区的更改满意后,使用 `git commit -m "提交的log"` 创建一个新的提交,并记录一条描述性消息。 6. 最后,使用 `git push origin master` 将本地的提交推送到远程的master分支。 注意:`git checkout HEAD .` 或 `git checkout HEAD <file>` 可能会清空工作区和暂存区,因此在执行这些命令之前务必确认它们不会意外覆盖你尚未提交的改动。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值