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

打印 上一主题 下一主题

主题 842|帖子 842|积分 2526

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 文件到其近来的提交状态,你可以运行:
    1. git restore file.txt
    复制代码
  • 恢复多个文件:你可以一次性恢复多个文件,只需在命令中列出它们,用空格分隔。
  • 恢复整个目次:如果你修改了一个目次中的所有文件,并盼望恢复整个目次到之前的提交状态,只需指定目次名即可。注意,这不会递归地恢复子目次中的文件,除非明白指定。
  • 使用 --staged 选项:默认情况下,git restore 恢复的是工作目次中的文件。但是,如果你盼望从暂存区(即你即将提交的更改)中移除一个或多个文件,可以使用 --staged 选项。这相当于使用 git reset HEAD <file>,但不会更改工作目次中的文件。
    1. 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 修改近来的提交。
  • 撤销上一次的提交并取消暂存更改(但生存在工作目次中):
    1. git reset --mixed HEAD~1
    复制代码
    或者简朴地使用 git reset HEAD~1,因为 --mixed 是默认模式。
  • 撤销上一次的提交并抛弃所有更改(在工作目次和暂存区中):
    1. 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> 取代,作为更直观和专用的命令。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大号在练葵花宝典

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表