- Git入门
- Git - 首页
- Git - 版本控制
- Git - 基本概念
- Git - 命令行
- Git - 安装
- Git - 首次设置
- Git - 基本命令
- Git - 获取帮助
- Git - 工具
- Git - 速查表
- Git - 术语
- Git分支
- Git - 简述分支
- Git - 创建新分支
- Git - 切换分支
- Git - 分支和合并
- Git - 合并冲突
- Git - 管理分支
- Git - 分支工作流程
- Git - 远程分支
- Git - 跟踪分支
- Git - 变基
- Git - 变基与合并
- Git - 合并提交
- Git操作
- Git - 克隆操作
- Git - 标签操作
- Git - 别名操作
- Git - 提交操作
- Git - 暂存操作
- Git - 移动操作
- Git - 重命名操作
- Git - 推送操作
- Git - 拉取操作
- Git - 分叉操作
- Git - 修补操作
- Git - 差异操作
- Git - 状态操作
- Git - 日志操作
- Git - HEAD操作
- Git - origin master
- Git撤销
- Git - 撤销更改
- Git - 检出
- Git - 还原
- Git - 重置
- Git - 恢复操作
- Git - 删除
- Git - 切换操作
- Git - cherry-pick
- Git - 修订
- 服务器上的Git
- Git - 本地协议
- Git - 智能HTTP协议
- Git - 哑HTTP协议
- Git - SSH协议
- Git - Git协议
- Git - 在服务器上获取Git
- Git - 设置服务器
- Git - 守护进程
- Git - GitWeb
- Git - GitLab
- Git - 第三方托管选项
- 分布式Git
- Git - 分布式工作流程
- Git - 为项目做贡献
- Git - 维持项目
Git重置
在Git中,命令git reset可以用来将当前HEAD重置到指定状态。
这有效地将工作目录和索引重置为与之前的提交匹配,或者将当前分支指针切换到指定的提交。
它做了什么?
1. 与反转git add类似,此过程有效地撤销了已安排提交的更改。
2. 重置后,我们可以使用git restore从索引更新工作树,或者使用git restore --source=<tree-ish>同时将提交内容复制到索引和工作树。
语法
git reset [-q] [<tree-ish>] [--] <pathspec>… git reset [-q] [--pathspec-from-file=<file> [--pathspec-file-nul]] [<tree-ish>]
git reset [<tree-ish>] [--] <pathspec>… 命令将指定路径 (<pathspec>) 的索引条目重置为与<tree-ish>处的状态匹配,而不影响工作树或当前分支。
git reset (--patch | -p) [<tree-ish>] [--] [<pathspec>…]
git reset --patch或-p命令允许在索引和<tree-ish>(默认为HEAD)之间交互式选择块。
通过反转和将某些块应用于索引,实际上撤消了已暂存提交的某些修改。
此功能允许选择性地修改或删除暂存区中的更改,类似于git add --patch。
git reset [<mode>] [<commit>]
命令git reset [<mode>] [<commit>] 根据<mode>修改索引和工作树,并将当前分支头重置为<commit>。
如果未指定<mode>,则默认值为--mixed。
--soft - 将修改保留为待提交的更改,并将分支头移动到<commit>,而不改变工作树或索引。
--mixed - 将更改标记为未暂存,并将索引重置为<commit>,同时保留工作树中的修改。
--hard - 删除<commit>之后的所有修改,并将工作树和索引重置为<commit>。
--merge - Git处理未合并的索引项,重置索引,并更新<commit>和HEAD之间不同的工作树文件。
--keep - 与--merge类似,但如果对<commit>和HEAD之间不同的文件进行了本地修改,则会停止。
--[no-]recurse-submodules - 更新工作树时,它会更新子模块的工作树以匹配超级项目中记录的提交。
借助这些参数,Git在将仓库状态重置到特定提交时,可以更灵活地处理对索引、工作树和子模块的修改。
选项
git reset命令可以使用以下选项
-q 或 --quiet
使用-q或--quiet选项时,Git会抑制所有输出,只显示错误消息。
--refresh / --no-refresh
Git的--refresh选项确保在混合重置(git reset --mixed)之后更新索引。
为了确保索引反映重置操作后的修改,默认情况下启用此功能。
另一方面,混合重置后,--no-refresh会阻止此自动索引刷新。
git reset --refresh
--pathspec-from-file=<file>
Git提供了一个名为--pathspec-from-file=<file>的选项,允许我们从文件中指定pathspec模式,而不是直接从命令行指定。
如果<file>为-,则从标准输入读取。
Pathspec元素可以根据core.quotePath配置变量的指示进行引用,并在文件中由LF或CR/LF分隔。
对于有效管理冗长或复杂的pathspec模式,此选项很有用。
--pathspec-file-nul
Git的--pathspec-file-nul选项改变了--pathspec-from-file的行为。
它指定将使用NUL字符来分隔文件中的pathspec项;所有其他字符,包括换行符和引号,都将按字面解释。
- 当pathspec模式包含必须完全保留在文件中的特殊或复杂字符时,此选项很有用。
git reset --pathspec-from-file=file-list.txt --pathspec-file-nul
--pathspec-from-file=file-list.txt − 告诉Git从file-list.txt读取文件路径。
--pathspec-file-nul − 指定file-list.txt中的文件路径由空字符(\0)而不是默认的换行符(\n)分隔。
--
带有--的Git命令指示任何后续参数都应作为文件名或路径而不是选项处理。
git rest -- <file>
它通常被称为分隔符选项。它不是git reset独有的,而是一个通用的Git约定,它告诉Git将--之后的任何内容解释为文件路径。
--soft
它将HEAD移动到指定的提交,但保持暂存区和工作目录不变。
更改仍然已暂存(索引不变)。
工作目录中没有显示更改。
git reset --soft HEAD~1
--mixed
它将HEAD移动到指定的提交,并取消暂存任何已暂存的更改。
这是默认选项。
工作目录保持不变。
暂存区重置为指定提交的状态。
git reset --mixed HEAD~1
--hard
它将HEAD移动到指定的提交,并将暂存区和工作目录都重置为与指定的提交匹配。
所有未提交的更改都将丢失。
git reset --hard <commit>
谨慎使用git reset,尤其是在使用--hard选项时,因为它可能导致更改丢失。
--keep <commit>
它将索引重置为指定的提交,但保留可以干净地应用于工作目录的本地更改。
如果与本地更改冲突,重置将停止。
git reset --keep <commit>
--merge <commit>
它重置索引,但保留工作目录中当前HEAD和指定提交之间不同的更改。
如果合并失败,则使用此选项,将其重置回干净状态。
git reset --merge HEAD~1
因此,根据您使用的选项,git reset命令可以应用于工作目录、暂存区(索引)或提交历史记录。