先再新建一个提交记录,记录数多了,这样方便查询历史记录。
cooldeMacBook-Pro:git-learn cool$ vim a.text cooldeMacBook-Pro:git-learn cool$ git commit -m "for history" a.text [master d729d2f] for history 1 file changed, 1 insertion(+), 1 deletion(-) cooldeMacBook-Pro:git-learn cool$
一、git log当前游标下历史记录
就是指 如果历史版本有8个,当前游标下恢复成第5个版本,那么git log 显示的记录只能看到 1-5版本,无法显示 之后的 6 -8 版本。
1、git log
cooldeMacBook-Pro:git-learn cool$ git log commit d729d2f2ca7c2ae0e13d02b6667fb4154d7f3726 Author: test <[email protected]> Date: Sun Oct 28 17:44:47 2018 +0800 for history commit 4e8507389695dc3061a9dfe101a0325594e8b164 Author: test <[email protected]> Date: Sun Oct 28 17:38:23 2018 +0800 Second commit commit 7f4008f0e72ad3d47c4cfc7916870fe91ae0ae51 Author: test <[email protected]> Date: Sun Oct 28 17:16:09 2018 +0800 hh commit b857e6bf3b44bba35c88c77139ae0c0e0cd2b182 Author: test <[email protected]> Date: Sun Oct 28 16:52:21 2018 +0800 first submit a.text : ======================================================= 【git log 信息下面若是 光标带冒号,按空格键可以翻页】 多屏显示控制方式: 空格向下翻页 b 向上翻页 q 退出 commit d729d2f2ca7c2ae0e13d02b6667fb4154d7f3726 代表 提交hash值
2、git log –pretty=oneline【解决输出日志信息太多问题】
cooldeMacBook-Pro:git-learn cool$ git log --pretty=oneline d729d2f2ca7c2ae0e13d02b6667fb4154d7f3726 for history 4e8507389695dc3061a9dfe101a0325594e8b164 Second commit 7f4008f0e72ad3d47c4cfc7916870fe91ae0ae51 hh b857e6bf3b44bba35c88c77139ae0c0e0cd2b182 first submit a.text cooldeMacBook-Pro:git-learn cool$
3、git log –oneline【解决输出日志信息太多问题】
cooldeMacBook-Pro:git-learn cool$ git log --oneline d729d2f for history 4e85073 Second commit 7f4008f hh b857e6b first submit a.text cooldeMacBook-Pro:git-learn cool$
二、git reflog 显示项目所有历史记录
cooldeMacBook-Pro:git-learn cool$ git reflog d729d2f HEAD@{0}: commit: for history 4e85073 HEAD@{1}: commit: Second commit 7f4008f HEAD@{2}: commit: hh b857e6b HEAD@{3}: commit (initial): first submit a.text cooldeMacBook-Pro:git-learn cool$ HEAD@{移动到当前版本需要多少步}
三、历史版本恢复
1、先根据 git 历史记录 找到游标【head】对应的 hash 局部索引值。
cooldeMacBook-Pro:git-learn cool$ git reflog d729d2f HEAD@{0}: commit: for history 4e85073 HEAD@{1}: commit: Second commit 7f4008f HEAD@{2}: commit: hh b857e6b HEAD@{3}: commit (initial): first submit a.text cooldeMacBook-Pro:git-learn cool$ HEAD@{移动到当前版本需要多少步}
2、选择历史版本进行恢复
(1)git reset --hard [局部索引值]
cooldeMacBook-Pro:git-learn cool$ git reset --hard 7f4008f HEAD is now at 7f4008f hh
(2)或者使用^符号:只能后退
git reset --hard HEAD^
注:在当前游标下,一个^表示后退一步,n个^表示后退n步
(3)或者使用~符号:只能后退
git reset --hard HEAD~n
注:表示 当前游标下 后退n 步
四、恢复到上一次提交记录
控制台直接输入: git reset --hard
就可以恢复到最近的一次提交记录。
cooldeMacBook-Pro:git-learn cool$ vim a.text cooldeMacBook-Pro:git-learn cool$ git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: a.text no changes added to commit (use "git add" and/or "git commit -a") cooldeMacBook-Pro:git-learn cool$ git reset --hard HEAD is now at 7f4008f hh cooldeMacBook-Pro:git-learn cool$ git status On branch master nothing to commit, working directory clean cooldeMacBook-Pro:git-learn cool$
一开始 工作区 、暂存区 和本地仓库 都是相同的,后来修改了a.text。然后用git status
查看,说可以去提交了。这个时候,输入git reset --hard
发现工作区和暂存区和本地仓库,都恢复到了最近的一次提交记录上去了。工作区中的a.text 的修改信息已被删除,文件已经还原到最近一次的提交记录。
同理git reset --soft
其实没有效果,git reset --mixed
其实就是移除了那些之前添加到暂存区的文件。
五、git reset --soft|mixed|hard
- –hard 参数
- 在本地库移动 HEAD 指针
- 重置暂存区【暂存区官方文档也叫 index file】
- 重置工作区
六、删除文件找回
git 的文件删除操作,也要提交记录到本地仓库,这样才能算真正记录了文件删除。
1、新在工作区中将之前提交过的文件进行删除
cooldeMacBook-Pro:git-learn cool$ git status On branch master nothing to commit, working tree clean cooldeMacBook-Pro:git-learn cool$ ls a.text bbb.txt cooldeMacBook-Pro:git-learn cool$ rm bbb.txt cooldeMacBook-Pro:git-learn cool$ git status On branch master Changes not staged for commit: (use "git add/rm <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) deleted: bbb.txt no changes added to commit (use "git add" and/or "git commit -a") cooldeMacBook-Pro:git-learn cool$ =================================== 新建了两个文件,然后将两个文件都提交到了本地仓库。 接着其中删了一个,查看git status发现有文件删除,需要提交记录到暂存区或者直接提交到本地仓库
2、接下来将删除文件记录添加到暂存区:
cooldeMacBook-Pro:git-learn cool$ git add bbb.txt cooldeMacBook-Pro:git-learn cool$ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) deleted: bbb.txt cooldeMacBook-Pro:git-learn cool$ ======================================== 将 bbb.txt 的删除记录 添加到了 暂存区,并显示 git status 状态
3、最后将删除文件记录提交到 本地仓库:
cooldeMacBook-Pro:git-learn cool$ git commit -m "bbb.txt has been deleted" bbb.txt [master 7719e56] bbb.txt has been deleted 1 file changed, 2 deletions(-) delete mode 100644 bbb.txt cooldeMacBook-Pro:git-learn cool$ git status On branch master nothing to commit, working tree clean cooldeMacBook-Pro:git-learn cool$ ls a.text cooldeMacBook-Pro:git-learn cool$
恢复已删除文件的前提:删除前,文件存在时的状态已提交到了本地库。
操作:git reset –hard [指针位置]
①删除操作已经提交到本地库:指针位置指向历史记录
git reset --hard [八位hash值,比如:7f4008f]
②删除操作尚未提交到本地库:指针位置使用HEAD
git reset --hard head
或者可以直接输入 git reset --hard