【三】Git操作指南:数据回溯和删除数据恢复
数据回溯
文件恢复到最后一次提交时的状态
就比如说我们修改 init.txt 这个文件,但是发现修改还不如不改的时候。我们可以让该文件回到最后一次提交时的状态。
git checkout init.txt
git restore init.txt
- 这两个命令都能让 init.txt 回到最后一次提交时的状态
- 不过这个命令在当你将其加入暂存区时单单执行将没有效果,因为它是以暂存区的文件内容来恢复工作区域的对应的文件的。
工作区域所有修改文件回到最后一次提交状态
git checkout .
git restore .
- 同样这个命令对已经添加到暂存区的文件无效。理由和上面一样。不会删除工作区域文件
将添加到暂存区中的文件回到最后一次提交状态
首先我们得将暂存区内容恢复到最后一次提交的状态
git restore --staged filename (or .)
- 这个命令能够将暂存区的内容,回到最后一次提交的状态。
然后执行下面命令,将工作区对应的文件恢复到最后一次提交的状态
git restore filename (or .)
git checkout filename (or .)
重置到某个版本
软重置
git reset --soft HEAD~1(1 是变量,后退多少版本数)
- 当执行上面的命令过后,我们在查看提交日志 git log 会发现最后一次次的提交已经消失了。 这是一个软重置,因为我们没有提交的修改文件仍在暂存区,直接执行 git commit -m 'submit' 还能够提交。不会删除,不会修改工作文件夹文件
默认重置
git reset HEAD~1
- 当执行上面的命令过后,我们在查看提交日志 git log 会发现指定的最后一次的提交已经消失了。 这是一个默认重置,因为暂存区中没有提交的文件也被从暂存区删除了。但是工作文件夹下的文件不会删除。
硬重置
git reset --hard HEAD~1
- 执行上面的命令。会删除暂存区内容,删除工作区文件夹。完全的和回滚的版本文件目录结构相同,暂存区相同等。会修改和删除工作文件夹下文件
删除没有在暂存区中的文件
git clean -dn
- 此命令将列出将要删除的文件列表
git clean -df
- 将没有保存在暂存区中的文件删除。
数据恢复
保存暂未提交的数据然后回滚
当我们不想提交数据时,但又不得不回到某个提交状态时
git stash
git stash push -m "third feature added"
- 这个命令可以存储当前工作进度。第二个命令和添加注释信息
git stash list
- 此命令可以查看存储的工作进度列表
-
stash@{0}: On master: third feature added stash@{1}: WIP on master: 5be9349 test stash@{2}: WIP on master: 5be9349 test stash@{3}: WIP on master: eaaf828 initial commit
git stash apply
- 此命令会应用进度列表第一个进度
git stash pop index
- index: 时存储工作进度分配的列表
- 此命令会将指定的index保存的进度恢复,然后将其从进度列表中删除
git stash clear
- 清空进度列表
恢复已经就删除的分支或分支
查看已经提交或保留列表中已经删除的信息操作记录
-
git reflog
- 此命令能查我的操作日志信息,里面的hash有用,可以用来恢复
- 假设某个已经删除的分支的hash值是 a8a2206
-
# 以此分支为模板,创建头分离分支 git checkout a8a2206 # 在该头分离分支上执行创建分支命令,保存分支 git checkout -b a8a2206
-
- 假设某个已经删除的提交的hash值是 e2b7724
-
git reset --hard e2b7724
- 此命令可以回滚到该提交
-