一步一步探索 git reset
- 为求简单, 本文只考虑初始状态 Git 仓库, 缓存区域 和 当前目录 相同的情况
- 本文的源地址: https://github.com/liuyunbin/...
- 在同一目录下, 有相关的测试脚本
$ git version
git version 2.30.1
探索如下
构建一个测试目录
$ rm -r test
$ mkdir -p test && cd test
$
$ git init
$
$ echo a > 1.txt
$ git add 1.txt
$ git commit -m "A"
$
$ echo b > 1.txt
$ git add 1.txt
$ git commit -m "B"
$
$ echo c > 1.txt
$ git add 1.txt
$ git commit -m "C"
$
$ echo d > 1.txt
$ git add 1.txt
$ git commit -m "D"
此时的提交记录是 A --> B --> C --> D, Git 仓库, 暂存区, 当前目录都是 D
如果执行
git reset --soft HEAD~2
会有以下行为
- 将 HEAD 指向 HEAD~2 (B)
- 此时, Git 仓库是 B, 暂存区 和 当前目录 是 D
- 此时, 查看 仓库状态如下
$ git status
On branch master
Changes to be committed:
(use "git restore --staged ..." to unstage)
modified:1.txt
如果执行
git reset --mixed HEAD~2
会有以下行为
- 将 HEAD 指向 HEAD~2 (B)
- 将暂存区域中 HEAD (B) 之后的数据移到当前目录
- 此时, Git 仓库 和 暂存区域 是 B, 当前目录 是 D
- 此时, 查看 仓库状态如下
$ git status
On branch master
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git restore ..." to discard changes in working directory)
modified:1.txtno changes added to commit (use "git add" and/or "git commit -a")
如果执行
git reset HEAD~2
会有以下行为
这个同 git reset --mixed HEAD~2
如果执行
git reset --hard HEAD~2
会有以下行为
- 将 HEAD 指向 HEAD~2 (B)
- 删除 暂存区域, 当前目录中 HEAD (B) 之后的数据
- 此时, Git 仓库, 暂存区域 和 当前目录 都是 B
- 此时, 查看 仓库状态如下
$ git status
On branch master
nothing to commit, working tree clean
如果执行
git reset HEAD~2 -- 1.txt
会有以下行为
- 将暂存区域中 HEAD 之后的数据移到当前目录
- 将 Git 仓库 HEAD~2 的 1.txt 加入暂存区
- 此时, Git 仓库 和 当前目录为 D, 暂存区域中的 1.txt 是 B
- 此时, 查看 仓库状态如下
$ git status
On branch master
Changes to be committed:
(use "git restore --staged ..." to unstage)
modified:1.txtChanges not staged for commit:
(use "git add ..." to update what will be committed)
(use "git restore ..." to discard changes in working directory)
modified:1.txt
如果执行
git reset --mixed HEAD~2 -- 1.txt
会有以下行为
【一步一步探索 git reset】这个同 git reset --mixed HEAD~2
, 该命令已过时参考资源
- https://git-scm.com/book/zh/v...
推荐阅读
- git|使用git命令把代码上传到Gitee本地仓库
- java|Go 1.18 二进制文件的信息嵌入
- java|我总有办法让你今晚回不了家...
- 杂文|git clone下载文件到指定目录
- git本地仓库和暂存区
- Git|开源协议与git分支
- Git|Git入门,什么是git,如何使用git以及git分支概念
- eng|Github - 第一篇(Github安装与配置)
- eng|Github - 第三篇(分支操作案例)