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

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

取消已暂存的文件

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.lryc.cn/news/452819.html

相关文章:

  • 如何在Spring Boot中有条件地运行CommandLineRunner Bean
  • 边缘自适应粒子滤波(Edge-Adaptive Particle Filter)的MATLAB函数示例,以及相应的讲解
  • 一块1T硬盘怎么有sdb1和sdb2
  • Python知识点:如何使用Flink与Python进行实时数据处理
  • Swagger配置且添加小锁(asp.net)(笔记)
  • lambda表达式底层实现:反编译LambdaMetafactory + 转储dump + 运行过程 + 反汇编 + 动态指令invokedynamic
  • Unity初识+面板介绍
  • 【CSS in Depth 2 精译_041】6.4 CSS 中的堆叠上下文与 z-index(上)
  • uniapp微信小程序巧用跳转封装鉴权路由
  • 国外电商系统开发-运维系统开发
  • 基于投影滤波算法的rick合成地震波滤波matlab仿真
  • 【艾思科蓝】机器学习框架终极指南:PyTorch vs TensorFlow vs Keras vs Scikit-learn
  • 招联金融秋招内推2025
  • 遮罩解决图片悬浮操作看不到的情况
  • IoT网关的主要功能有哪些?天拓四方
  • 继承实现单例模式的探索(一)
  • 【代码实现】opencv 高斯模糊和pytorch 高斯模糊
  • python基础语法2
  • linux第一课:下载与安装
  • 虚拟机添加共享文件夹后仍无法显示文件
  • OSPF协议
  • 行为设计模式 -观察者模式- JAVA
  • 在阿里工作是一种什么体验?
  • 828华为云征文|华为云Flexus云服务器X实例——uniapp功能开发、搭建股票系统选择用什么服务器比较好?
  • 电子电路元件器介绍与选型——晶振
  • 【IEEE PDF eXpress】格式不对
  • OpenAI全新多模态内容审核模型上线:基于 GPT-4o,可检测文本和图像
  • Visual Studio 字体与主题推荐
  • 信息学奥赛一本通 1416:【17NOIP普及组】棋盘 | 洛谷 P3956 [NOIP2017 普及组] 棋盘
  • UE4完整教程 UE4简介 UE4学习攻略及文件格式