当前位置: 首页 > article >正文

【区别】三种命令取消已暂存的文件,处理暂存区和文件的跟踪状态

取消已暂存的文件

git restore --staged <文件>git reset HEAD <文件>git rm --cached <文件> 都可以用于取消已暂存的文件,但它们的作用和使用场景略有不同。下面是它们的区别:

1. git restore --staged <文件>

  • 该命令用于将文件从暂存区(staging area)移除,恢复到工作区的状态,不会更改工作区的文件内容
  • 仅仅撤销 git add 的操作,让文件回到未暂存的状态。
  • 不改变文件的版本控制状态(文件仍然受 Git 跟踪)。
  • 作用:用于取消将文件加入暂存区,但保留工作区的改动不受影响。

示例:你在执行 git add 后发现文件暂存错了,但你不想丢失对文件的修改,这时使用 git restore --staged 可以取消暂存而不更改文件内容。

2. git reset HEAD <文件>

  • git reset HEAD <文件>git restore --staged <文件> 功能非常相似,都会将文件从暂存区移除,回到未暂存状态。
  • git reset HEAD 是一个较老的方式,git restore --staged 是 Git 新版本中引入的命令,目的是更清晰地区分 Git 的恢复操作(restore)和重置操作(reset)。
  • 作用:用于撤销已暂存的文件,让文件状态从暂存区回到未暂存状态,工作区文件内容不受影响。

示例:你想取消 git add 后的暂存,但并不想丢失工作区的修改内容,两者都是可以使用的。

3. git rm --cached <文件>

  • 与前两个命令不同的是,git rm --cached <文件> 不仅会将文件从暂存区移除,而且会将文件从 Git 的跟踪中移除
  • 文件将不再受 Git 版本控制,但仍然保留在工作区中。
  • 通常用于从版本库中移除文件,但你仍然希望文件保留在你的本地目录中。
  • 作用:当你希望从版本库删除某个文件,但保留文件在你的工作区中时使用。

示例:你发现有一个文件不应该被 Git 跟踪(例如 .env 文件),可以通过 git rm --cached <文件> 将其从 Git 中移除,但文件内容仍然保留在本地。

总结

  • git restore --staged <文件>git reset HEAD <文件>:都用于取消文件暂存,仅将文件状态从暂存区移除,文件仍然受 Git 跟踪,内容不受影响。两者功能一致,只是 git restore --staged 更现代,语义更明确。
  • git rm --cached <文件>:将文件从暂存区移除,并停止对文件的版本控制(将文件从版本库删除),但文件仍然保留在工作区。适用于希望文件不再受 Git 跟踪的情况。

选择哪个命令取决于你希望如何处理暂存区和文件的跟踪状态。

git reset --hard 使用时需小心,以免丢失未保存的工作。

  • 如果你不想丢失数据或想保留历史,git revert 是更安全的选择。
  • 如果你希望恢复到之前某个稳定状态,且对丢失当前的工作区和提交不在意,可以继续使用 git reset --hard

替代命令和替代方法

  1. git restore(更改工作目录文件)

    • git restore 是 Git 新增的命令,用于更改或丢弃工作区的更改。如果你希望只还原文件而不影响提交历史,可以使用:
      git restore .
      
    • 它不会改变当前 HEAD 所指向的提交,而只是将工作目录恢复到 HEAD 所指的状态。
  2. git switch(切换分支)

    • git switch 是另一个新增命令,专门用于切换分支。与 checkout 类似,但专注于分支的操作。
    • 如果想重置当前分支到某个标签或提交,可以先使用 switch 切换到分支,然后用 reset
  3. git reset --hard 的替代:git checkout <commit>

    • 如果你只想查看某个特定的提交而不永久修改分支,你可以使用 checkout 命令:
      git checkout v1
      
    • 这样,你不会重置分支的 HEAD,而只是临时切换到那个提交。
  4. git revert(安全地回滚)

    • 如果你想撤销一次或多次提交,但希望保留提交历史,使用 revert 更合适:
      git revert <commit>
      
    • 这样你不会丢失提交记录,只是会生成一个新的反向提交。

http://www.kler.cn/news/335483.html

相关文章:

  • 防止错误输入!Excel单元格限制输入内容的三种有效方式
  • centos7编译安装openresty+lua-resty-http+lua-resty-openssl-master
  • mycat读写分离中间件
  • JavaScript 根据时间先后排序数组
  • CSS基础-常见属性(二)
  • 32单片机 低功耗模式
  • C++项目工程代码自动检查
  • 使用 Python 遍历文件夹
  • 大数据处理从零开始————4.认识HDFS分布式文件系统
  • Leetcode - 周赛417
  • SpringBoot3+Druid YAML配置
  • Qt开发技巧(十五)字符串去除空格,跨网段搜索不生效,设置图片显示失败问题,表格视图的批量删除,主动判断字串编码,开启向前查询的属性,画家类载入html来绘制
  • 简单的找交集差集算法
  • Ubuntu 安装 Docker Compose
  • 基于java+springboot的酒店预定网站、酒店客房管理系统
  • HarmonyOS 组件
  • EPICS asyn库
  • MATLAB计算与建模常见函数:3.参数估计
  • 霓虹灯数字时钟(可复制源代码)
  • 智能手表(Smart Watch)项目