git基础-(2)-历史记录和版本恢复

先再新建一个提交记录,记录数多了,这样方便查询历史记录。

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

  • –soft 参数
    • 仅仅在本地库移动 HEAD 指针
  • –mixed 参数
    • 在本地库移动 HEAD 指针
    • 重置暂存区【暂存区官方文档也叫 index file】
  • –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

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments