Git 状态重置 或者 回滚
单词
- reset
- checkout
- HEAD HEAD^ HEAD~n
语法
git 工作区还原到 暂存区的状态,也就是说 取消最近新添加的文件修改
git checkout . //还原工作区 <所有> 文件 为暂存区状态暂存区状态
git checkout -- filename //还原工作区 <指定> 文件 为暂存区状态暂存区状态
补充说明:暂存区状态(最近一次commit 或者 暂存区回滚到的 commit 状态)
git暂存区 恢复到 commit 状态
git reset HEAD // 恢复暂存区到 HEAD 指针指向的位置
git reset HEAD^ // 恢复暂存区到 HEAD 的上一次 commit
git reset HEAD~4 // 恢复暂存区到 HEAD 的上第4次 commit
git reset <hash> // 恢复暂存区到 指定hash commit处
git reset 缺省值为 mixed //将HEAD reset 没有修改 工作区 但是修改了 暂存区
git reset --soft //将HEAD reset 没有修改 工作区 与 暂存区
git reset --hard //将HEAD reset 同时修改工作区与暂存区
git reset 后 git log 只显示到 HEAD commit 处,以往的不显示,但是 可以到 项目的 .git/logs/refs
中去寻找 一般记录保存 30天
找到后可以 使用 git reset
语义
单线型 版本迭代演进 与回滚演示
演示前的准备
git init Test
初始化 一个Test 用于 git 演示建立
hello.c
文件 用于版本迭代git ad hello.c
且git commit -m ‘Write a Hello World C Language file'
git log --oneline
结果:b2e1368 Write a Hello World C Language filWrite a Hello World C Language fil
vi hello.c
在文件里面 return 0 前 补充 getchar() 并提交git log --oneline
结果:eb96dee At the end insert getchar() to make a wait
b2e1368 Write a Hello World C Language fil
vi hello.c
在文件里面 补上 // Author: XXXX 提交git log --oneline
结果:
550f417 (HEAD -> master) insert author information into the file
eb96dee At the end insert getchar() to make a wait
b2e1368 Write a Hello World C Language fil
修改开始
代码最初为:
#include 'stido.h'
int main() {
printf('Hello World! \n');
return 0;
}
当前 hello.c 源码 如下:
#include 'stido.h'
// Author: Leobod
int main() {
printf('Hello World! \n');
getchar();
return 0;
}
修改后
#include 'stido.h'
// Author: Leobod
// Description: A C language demo
int main() {
printf('Hello World! \n');
getchar();
return 0;
}
情况1
若 使用
git checkout .
或者git checkout -- Hello.c
后 恢复到 2处样式情况2
若 使用
git reset --hard b2e1368
恢复到 代码最初样子 且 工作区 暂存区代码都一样git log
为b2e1368 Write a Hello World C Language fil
可以使用
git reset --hard 550f417
返回 最后一次修改状态找不到 hash 请前往
.git/logs/refs
中寻找情况3
若使用
git reset b2e1368
工作区 代码 仍为 4处 样式, 暂存区与版本库为 代码最初样式此时 使用
git status
可以发现提示若想 工作区也 还原 多执行一步
git checkout .
回到 最新状态 依然是
git reset 550f417
此处
550f417
对应最后一次commit的 hash 值
本文部分内容参考引用了 Domon-Git Reset 三种模式