reset命令

作用:将当前 HEAD 重置为指定状态

Git 的四个区域

  • Workspace:工作区,就是你平时存放项目代码的地方;
  • Index / Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息,一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index);
  • Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本;
  • Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换;
add
commit
push
checkout/merget
fetch/clone
push
Workspace
index
Repository
Remote

常用命令

命令一

git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit_id> | HEAD^]
  • –soft

    不删除工作区改动代码,撤销 commit ,不撤销 git add .

    会在重置 HEADbranch 时,保留工作目录暂存区中的内容,并把重置 HEAD 所带来的新的差异放进暂存区。

  • –mixed

    这是默认动作

    重置位置的同时,只保留Working Tree工作目录的內容,但会将 Index暂存区Repository 中的內容更改和reset目标节点一致,因此原节点和Reset节点之间的【差异变更集】会放入Working Tree工作目录中。所以效果看起来就是原节点和Reset节点之间的所有差异都会放到工作目录中。

  • –hard

    重置位置的同时,直接将 working Tree工作目录index 暂存区repository 都重置成目标Reset节点的內容,所以效果看起来等同于清空暂存区和工作区。

  • –merge

    撤销合并(merge)/修订(commit)/变基(rebase)操作,在需要提供ORIG_HEAD(git log 获取的 commit_id)。

    • 在执行撤销合并/ 变基时,效果等同于撤销合并(git merge --abort)/撤销变基(git rebase --abort)。
    • 在执行修订,效果等同于强制撤销(git reset --hard
  • –keep

    重置分支到指定的提交,保留当前工作目录暂存区的更改。若重置Reset节点内容与工作目录和暂存区内容存在冲突时,该命令无法执行

命令二

git reset (--patch | -p) [<tree-ish>] [--] [<pathspec>...]

使用**-p交互性的有选择性地对块进行reset**,这是与git add -p相反的。

命令三

git reset [-q] [<tree-ish>] [--] <pathspec>...
git reset [-q] [--pathspec-from-file=<file> [--pathspec-file-nul]] [<tree-ish>]

匹配pathspec所有路径重置索引条目到git 树的状态。

选项

  • [-q, --quiet, --no-quiet]

    安静的执行,只报告错误

  • [–pathspec-from-file=]

    从文件读入命令行参数

  • --pathspec-file-nul

    在**–pathspec-from-file**模式换行符指定为NUL

  • ...

    指定操作的路径或者文件。

  • 代表某个版本的 commit_id,可通过 git log 或在 git 平台的 history 中查看。

  • HEAD^

    代表HEAD上一个版本,也可以写成 HEAD~1。如果进行了 2 次 commit,想都撤回,可以使用 HEAD~2

参考

git-reset Document
Git Reset:撤销与回溯,解读5种模式的妙用

你可能感兴趣的:(GIT,git)