Skip to content

git-reset

HEAD 或索引设置为已知状态。

概要

bash
git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit>]
git reset [-q] [<tree-ish>] [--] <pathspec>...
git reset [-q] [--pathspec-from-file=<file> [--pathspec-file-nul]] [<tree-ish>]
git reset (--patch | -p) [<tree-ish>] [--] [<pathspec>...]

描述

git reset 执行以下操作之一:

  1. git reset [<mode>] <commit> 更改 HEAD 指向的提交。这使得可以撤消各种 Git 操作,例如提交、合并、变基和拉取。
  2. 当您指定文件或目录或传递 --patch 时,git reset 更新指定文件的暂存版本。

选项

  • --mixed:将索引与新的 HEAD 匹配(默认)。如果指定 -N,将删除的路径标记为 intent-to-add。
  • --soft:保持工作树文件和索引不变。
  • --hard:用 <commit> 的版本覆盖所有文件和目录。
  • --merge:重置索引并更新工作树中 <commit>HEAD 之间不同的文件。
  • --keep:重置索引条目并更新工作树中 <commit>HEAD 之间不同的文件。
  • --recurse-submodules:递归重置所有活动子模块的工作树。
  • --no-recurse-submodules:不递归到子模块。
  • -q, --quiet:安静,仅报告错误。
  • --refresh, --no-refresh:混合重置后刷新索引。
  • --pathspec-from-file=<file>:在 <file> 中传递路径规范。
  • --pathspec-file-nul:仅与 --pathspec-from-file 一起使用。
  • -U<n>, --unified=<n>:生成具有 <n> 行上下文的差异。
  • --inter-hunk-context=<n>:显示差异块之间的上下文。
  • --:不再将任何更多参数解释为选项。
  • <pathspec>...:限制受操作影响的路径。

示例

bash
# 撤消添加
$ git add frotz.c filfre.c
$ git reset

# 撤消提交并重做
$ git commit ...
$ git reset --soft HEAD^
$ edit
$ git commit -a -c ORIG_HEAD

# 永久撤消提交
$ git commit ...
$ git reset --hard HEAD~3

# 撤消合并或拉取
$ git pull
$ git reset --hard
$ git pull . topic/branch
$ git reset --hard ORIG_HEAD

# 在脏工作树中撤消合并或拉取
$ git pull
$ git reset --merge ORIG_HEAD

# 重置索引中的单个文件
$ git reset -- frotz.c
$ git commit -m "Commit files in index"
$ git add frotz.c

Git

git 套件的一部分

基于 CC BY-NC-SA 3.0 许可发布