Git 结构原理与分支管理模型实战分析
一、认识工作区、暂存区、版本库
Git 的核心能力在于管理文件的历史版本。当发现之前的工作出现严重问题,需要回到特定历史节点时,版本回退功能就派上用场了。
1.1 版本回退
执行 git reset 命令用于回退版本,本质是将版本库中的内容回退,工作区或暂存区是否同步由参数决定。
语法格式:git reset [--soft | --mixed | --hard] [HEAD]
- --mixed(默认):将暂存区内容退回为指定提交版本,工作区文件保持不变。
- --soft:仅将版本库回退到指定版本,工作区和暂存区内容不变。
- --hard:将暂存区与工作区都退回到指定版本。注意:若工作区有未提交的代码,使用此参数会导致代码丢失且无法找回,务必慎用。
关于 HEAD 的引用方式:
HEAD:当前版本HEAD^:上一个版本HEAD^^:上上一个版本HEAD~n:第 n 个祖先版本
为了演示回退功能,我们先模拟创建三个版本的 ReadMe 并提交:
# 第一次修改提交
$ cat ReadMe
hello bit hello git hello world hello version1
$ git add ReadMe
$ git commit -m "add version1"
[master cff9d1e] add version1
1 file changed, 1 insertion(+)
# 第二次修改提交
$ cat ReadMe
hello bit hello git hello world hello version1 hello version2
$ git add ReadMe
$ git commit -m "add version2"
[master 14c12c3] add version2
1 file changed, 1 insertion(+)
# 第三次修改提交
$ cat ReadMe
hello bit hello git hello world hello version1 hello version2 hello version3
$ git add ReadMe
$ git commit -m "add version3"
[master d95c13f] add version3
1 file changed, 1 insertion(+)
# 查看历史提交记录
$ git log --pretty=oneline
d95c13ffc878a55a25a3d04e22abfc7d2e3e1383 (HEAD -> master) add version3
14c12c32464d6ead7159f5c24e786ce450c899dd add version2
cff9d1e019333318156f8c7d356a78c9e49a6e7b add version1
假设提交完 version3 后发现错误,想回退到 version2,且希望工作区也同步回退,此时使用 --hard 参数:
$ git reset --hard 14c12c32464d6ead7159f5c24e786ce450c899dd
HEAD is now at 14c12c3 add version2
$ ReadMe
hello bit hello git hello world hello version1 hello version2








