Git 版本控制--git restore和git reset

server/2024/11/15 7:07:45/

git restore 和 git reset 是 Git 版本控制系统中两个用于撤销更改的命令,但它们的作用范围和用途有所不同。

git restore

git restore 是 Git 版本控制系统中的一个命令,用于撤销工作目录中的更改,但不影响暂存区(staging area)或历史记录。这个命令是在 Git 2.23 版本中引入的,旨在提供一个更直观和直接的方式来恢复文件到之前的状态,替代了之前可能需要结合使用 git checkout -- <file> 或 git reset HEAD <file> 命令的场景。

基本用法

  • 恢复特定文件:如果你在工作目录中修改了一个或多个文件,并希望撤销这些更改,可以使用 git restore 命令后跟文件名。例如,要恢复 file.txt 文件到其最近的提交状态,你可以运行:

    git restore file.txt
  • 恢复多个文件:你可以一次性恢复多个文件,只需在命令中列出它们,用空格分隔。

  • 恢复整个目录:如果你修改了一个目录中的所有文件,并希望恢复整个目录到之前的提交状态,只需指定目录名即可。注意,这不会递归地恢复子目录中的文件,除非明确指定。

  • 使用 --staged 选项:默认情况下,git restore 恢复的是工作目录中的文件。但是,如果你希望从暂存区(即你即将提交的更改)中移除一个或多个文件,可以使用 --staged 选项。这相当于使用 git reset HEAD <file>,但不会更改工作目录中的文件。

    git restore --staged file.txt

    注意事项

  • 使用 git restore 时,确保你了解哪些更改将被撤销,特别是当处理重要文件时。
  • 如果你已经提交了你的更改,git restore 将不会撤销这些更改。在这种情况下,你可能需要使用 git revert 或 git reset 等命令来撤销提交。
  • git restore 是一个相对较新的命令,因此请确保你的 Git 版本支持它。如果你的 Git 版本较旧,你可能需要使用 git checkout 或 git reset 命令的等效用法

git reset

基本用法

git reset 有三个主要模式,通过 --soft--mixed(默认)和 --hard 选项来指定:

  • --soft:仅移动 HEAD 指针到指定的提交,保留暂存区和工作目录中的所有更改。这意呀着所有更改仍然被标记为已暂存(staged),准备好被提交。这通常用于重新组织提交历史,而不改变文件在暂存区和工作目录中的状态。

  • --mixed(或没有指定模式):移动 HEAD 指针到指定的提交,并将暂存区的内容重置为该提交的内容,但保留工作目录中的更改。这相当于撤销了之前的 git add 命令,使得之前已暂存的更改变为未暂存状态。

  • --hard:移动 HEAD 指针到指定的提交,并将暂存区和工作目录中的内容都重置为该提交的内容。这会丢弃自该提交以来在工作目录和暂存区中所做的所有更改。使用这个选项时要格外小心,因为它会丢弃未提交的更改。

示例

  1. 撤销上一次的提交(但保留更改在暂存区):

    git reset --soft HEAD~1

    然后,你可以使用 git commit 重新提交这些更改,或者使用 git commit --amend 修改最近的提交。

  2. 撤销上一次的提交并取消暂存更改(但保留在工作目录中):

    git reset --mixed HEAD~1

    或者简单地使用 git reset HEAD~1,因为 --mixed 是默认模式。

  3. 撤销上一次的提交并丢弃所有更改(在工作目录和暂存区中):

    git reset --hard HEAD~1

    警告:这将永久丢弃自上一次提交以来所做的所有更改。

注意事项

  • 在使用 git reset --hard 之前,请确保你确实想要丢弃这些更改,因为它们将无法恢复(除非你有其他备份或未推送的引用)。
  • git reset 默认不会更改工作目录中的文件,除非你使用了 --hard 选项。
  • 如果你只是想将某些文件从暂存区中移除,但不更改 HEAD 指针或工作目录中的文件,你可以使用 git restore --staged <file>(Git 2.23+)或 git reset HEAD <file>(在较旧的 Git 版本中)。然而,请注意 git reset HEAD <file> 在新版本的 Git 中已被 git restore --staged <file> 取代,作为更直观和专用的命令。

http://www.ppmy.cn/server/119693.html

相关文章

进程优先级和环境变量

1.优先级 1.优先级的概念 cpu资源分配的先后顺序&#xff0c;就是指进程的优先级&#xff0c;linux中进程的优先级数字越小&#xff0c;优先级越高&#xff1b; 2.为什么要有优先级 进程访问的资源(cpu)始终是有限的&#xff0c;而系统中进程又是比较多的&#xff0c;所以进…

Spring Boot-WebSocket相关问题

Spring Boot 中的 WebSocket 相关问题及解决方案 WebSocket 是一种双向的实时通信协议&#xff0c;它允许客户端和服务器之间建立持久连接&#xff0c;并在此连接上双向传输数据。与传统的 HTTP 请求-响应模型不同&#xff0c;WebSocket 能够显著减少网络开销和延迟&#xff0…

【系统架构设计】基于中间件的开发

【系统架构设计】基于中间件的开发 中间件技术J2EE.NET企业应用集成 中间件技术 中间件属于可复用软件的范畴&#xff0c;处于操作系统、网络和数据库之上&#xff0c;应用软件的下层。 J2EE J2EE 是针对 Web Service、业务对象、数据访问和消息报传送的一组规范。这组应用编…

RTX NVIDIA 3090卡配置对应pytorch,CUDA版本,NVIDIA驱动过程及问题整理

买了两块3090卡闲置很长时间了&#xff0c;之前tf 1.12.0版本用习惯了不想转工具。这段时间闲下来转了之后有些环境不适配&#xff0c;在雷神帮助下安装完毕&#xff0c;虽然出了点怪东西&#xff0c;整体还好。 原环境CUDA为11.4 其他配置如下 之前conda install的pytorch实为…

定义可引用的 CI/CD 配置文件中的输入参数

极狐GitLab 是一个一体化的 DevOps 平台&#xff0c;内置 CI/CD 功能。在极狐GitLab 15.11 中&#xff0c;我们引入了一项令人兴奋的新功能&#xff0c;允许用户为可包含的配置文件定义输入参数。 通过在 CI 模板中使用输入参数的功能&#xff0c;您可以将模板中的任何关键字替…

贪心算法day31|56. 合并区间、738. 单调递增的数字(整数与字符串的转换)、贪心刷题总结

贪心算法day31|56. 合并区间、738. 单调递增的数字、贪心刷题总结 56. 合并区间738. 单调递增的数字贪心刷题总结 56. 合并区间 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 …

计组之中断

目录 一. 程序查询方式二. 多重中断三. 程序中断方式四. DMA方式 \quad 一. 程序查询方式 \quad out打印命令 I/O接口的方式是多种多样的 \quad 二. 多重中断 \quad 关中断不会响应任何中断信号 注意是IF 中断服务程序 屏蔽字的作用就是屏蔽一些中断&#xff0c;优先级…

[产品管理-29]:NPDP新产品开发 - 27 - 战略 - 分层战略与示例

目录 1. 公司战略 2. 经营战略 3. 创新战略 4. 新产品组合战略 5. 新产品开发战略 战略分层是企业规划和管理的重要组成部分&#xff0c;它涉及不同层级的战略制定和实施。以下是根据您的要求&#xff0c;对公司战略、经营战略、创新战略、新产品组合战略、新产品开发战略…