您的位置:首页 > 其它

Git 版本回退1

2017-02-17 15:08 134 查看
上篇留了两个比较重要的撤销修改的情况:

3.如果误修改,已经commit到本地分支。

4.如果无修改已经push到 远程仓库。

在讲解之前,我们先看一个命令 git log,查看历史记录:

zxdeMacBook-Pro:work zs$ git add .
zxdeMacBook-Pro:work zs$ git commit -m "add xiaoweilianmusi"
[master b9efadc] add xiaoweilianmusi
1 file changed, 1 insertion(+), 1 deletion(-)
zxdeMacBook-Pro:work zs$ git log
commit b9efadc5d8ce7f3468aa0d7fd63a8e45fd52d6b2
Author: zhangshun <hbzhangshun@126.com>
Date:   Fri Feb 17 15:19:32 2017 +0800

add xiaoweilianmusi

commit f23235d7a88f12e5a4571d966ed4f67ec823f837
Author: zhangshun <hbzhangshun@126.com>
Date:   Fri Feb 17 15:19:05 2017 +0800

add cangjingkong

commit e6e06473117669e8e4881996612eacead12f82a1
Author: zhangshun <hbzhangshun@126.com>
Date:   Thu Feb 16 13:04:17 2017 +0800

修改addme文件

可以看出,我最近提交的是小威(不是苍井空),执行 git log 后,没有参数,会把最近的更新的排在最前边。有四部分组成:SHA-1校验和,作者名字,电子邮件地址以及提交日期和提交说明。后边的校验和可以简化理解为commit ID。

当然了git log 后边可以有很多可选参数,比如
--pretty=oneline,这个就是为了简化查看记录:

zxdeMacBook-Pro:work zs$ git log --pretty=oneline
b9efadc5d8ce7f3468aa0d7fd63a8e45fd52d6b2 add xiaoweilianmusi
f23235d7a88f12e5a4571d966ed4f67ec823f837 add cangjingkong
e6e06473117669e8e4881996612eacead12f82a1 修改addme文件


接下来我们就已经commit到版本分支的情况,讲解版本回退:

现在我想会退到第苍井空那个版本,怎么办呢??这时候我们可以使用git reset,而我们怎么知道回退的版本标示呢?前边博客

提到过HEAD就代表当前版本,就是对应的小威那个commit ID-b9efad...,同理苍井空对应的那个版本就是HEAD^(或HEAD~1),

就是f23235d..等等,1000个就HEAD^~1000。还有一种办法直接利用commit
ID.比如git reset --hard b9efad...,这个commit
ID

可以截取前边git会智能查找,我习惯用第二种方式。我们尝试一下,会退到苍井空版本。

zxdeMacBook-Pro:work zs$ git reset --hard f23235d
HEAD is now at f23235d add cangjingkong
zxdeMacBook-Pro:work zs$ git log
commit f23235d7a88f12e5a4571d966ed4f67ec823f837
Author: zhangshun <hbzhangshun@126.com>
Date:   Fri Feb 17 15:19:05 2017 +0800

add cangjingkong

commit e6e06473117669e8e4881996612eacead12f82a1
Author: zhangshun <hbzhangshun@126.com>
Date:   Thu Feb 16 13:04:17 2017 +0800

修改addme文件
zxdeMacBook-Pro:work zs$

zxdeMacBook-Pro:work zs$ cat addme.txt
GIT records your name and email address
I love you, cangjingkong!
好了,已经回退到苍井空版本了。

刚才讲了参数--hard,那有没有其他方式呢,其实还有另外两种--soft和--mixed(默认的)。下边着重讲解一下

我先恢复到以前的记录,使用git reflog,可以查看你的操作历史,也可以看到commit ID。

zxdeMacBook-Pro:work zs$ git reflog
f23235d HEAD@{4}: reset: moving to f23235d
b9efadc HEAD@{5}: commit: add xiaoweilianmusi
f23235d HEAD@{6}: commit: add cangjingkong
e6e0647 HEAD@{7}: commit (initial): 修改addme文件


(1)--mixed 默认模式

只是将git commit和index 信息回退到了某个版本,这些改动还在工作目录中,即会保留源码.

(2)--soft 模式

同样会保留源码,只回退到commit 信息到某个版本.不涉及index的回退,如果还需要提交,直接commit即可.

(3)--hard 模式

源码也会回退到某个版本,commit和index 都会回退到某个版本.(注意,这种方式是改变本地代码仓库源码)

当然有人在push代码以后,也使用 reset --hard <commit...> 回退代码到某个版本之前,但是这样会有一个问题,

远程仓库的代码没有变,commit,index都没有变,当你把本地代码修改完提交的时候你会发现全是冲突.....

实例练习一次吧。使用soft之后,commit ID 已经回退到苍井空版本,cat查看后,实际本地文件并没有回退。

zxdeMacBook-Pro:work zs$ git reset --soft f23235d
zxdeMacBook-Pro:work zs$ git log
commit f23235d7a88f12e5a4571d966ed4f67ec823f837
Author: zhangshun <hbzhangshun@126.com>
Date: Fri Feb 17 15:19:05 2017 +0800

add cangjingkong

commit e6e06473117669e8e4881996612eacead12f82a1
Author: zhangshun <hbzhangshun@126.com>
Date: Thu Feb 16 13:04:17 2017 +0800

修改addme文件
zxdeMacBook-Pro:work zs$ cat addme.txt GIT records your name and email address I love you, cangjingkong!I love you, xiaowei!

需要说明的是,我们reset后,commit ID 依然可以恢复,只要你知道回退前的具体commit ID!

补充一个知识点:有时候我们提交后,发现有点小瑕疵 或发现注释写的不够详细,想修改怎么办,难道还要重新add,commit吗?

git为我们提供了一个解决办法 git commit --amend -m "新的提交说明,不会产生新的说明"。这种适用错误修正后替换最近的提交。如果想修改最近提交的上一次以及上上次的提交等,还是用git reset 吧.

 假如你已经push到远程仓库了怎么办?说到这里,务必提醒同学们,提交到服务器前一定要自己确保代码准确无误,以免大家获取到错误代码,影响工作进度。那万一还是push了错误的修改怎么办,那咱们放到下一篇讲解吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Git 版本回退