Git 回到过去
git add 命令:用于把工作文件放入暂存区
git commit 命令:将暂存区中等待提交的文件放入git仓库
git reset 命令:将git 仓库中的文件还原到暂存区
git checkout 命令:将暂存区中的文件还原到工作目录
reset 命令
使用git log 命令查看提交记录
将git 仓库可视化:
现在三棵树(工作区,暂存区,git仓库)的状态:
回滚快照
快照是提交的版本每个版本称之为一个快照
现在使用reset 命令进行回滚:
执行 git reset HEAD~ 命令 #注:HEAD表示最新提交的快照(2ec01)HEAD~表示HEAD的上一个快照 HEAD~10表示最新快照的第前10个快照
现在快照回滚到了第二颗树(暂存区)
HEAD指向上一次快照1a86a
此时三棵树变为:
并且快照1a86a回滚到了暂存区
回滚前
回滚后
由于现在工作目录文件要比暂存区新所以git 会提示 使用add方法将LICENSE(V2)添加到暂存区
--soft 选项
get retset --soft HEAD~ #只移动HEAD指向但不将快照回滚到暂存区
移动前
移动后
---------------------------------------------------------------------------------------------------------
原先三棵树的状态
使用 -- soft 选项的状态
不将快照回滚到暂存区,相当于撤销了上一次的提交,如果不小心提交了 执行get retset --soft HEAD~ 即可
--hard 选项
git reset --hard HEAD~ 不仅移动HEAD的指向,和将快照回滚到暂存区而且将暂存区的文件还原到工作目录
之前执行完 git reset HEAD~时HEAD的指向
三棵树的状态
执行git reset --hard HEAD~
三棵树都回滚到了第一个版本(26728)
仓库内只剩下第一个版本并且工作目录下的LICENSE文件被删除
总结
1、移动HEAD指向(--soft)
2、将快照回滚到暂存区(默认)
3、将暂存区还原到工作目录(--hard)
回滚指定快照:
git reset 00c2929
ID输入5位即可
回滚个别文件:
git reset 快照 文件名/路径
忽略HEAD 移动,直接将指定快照指定文件回滚到暂存区
“往前滚”
前提知道快照的ID号
又回到了最新的版本
git reflog 记录了每一次操作
第一列为 HEAD指向的版本ID号