Git历史版本穿梭(涉及GitHub相关操作)

younghz原创,转载请注明出处:http://blog.csdn.net/u012150179/article/details/24889109


本篇博文主要说明两个问题:

1、  Git作为版本控制系统,那么他就应该具备在各次提交之间穿梭的能力,这里首先就先说恢复到历史提交的方法,也就是roll back的能力。

2、  滚到历史提交我又想回来怎么办?第二就说这个问题。

3、  深化说明在1中使用到的命令。

 

 

1、

首先,看一下版本库中的分支游标master的内容:

也就是最新commit 的ID。

下面的.git 目录下的HEAD就是是master的一个指向。

既然要回滚,就要知道想要回到的commit的ID,通过:

git log –oneline简化显示:

Git历史版本穿梭(涉及GitHub相关操作)_第1张图片

所谓的回滚其实就是将分支游标master指向之前的提交,重置命令git reset 上场:

git reset --hard commit-ID

即可。

 

2、

继续问题2,滚到历史提交又想回来的问题。

首先问题出来了,回去的话你得有commit id才行啊,可是经过上面的步骤你在执行git log的话只能找到回滚到的commit以及之前的记录。

这是.git目录下的另一个目录可以隆重登场了,看logs目录:

Git历史版本穿梭(涉及GitHub相关操作)_第2张图片

这个就是提交的历史记录,由于我并未执行git reset,所以你看见的记录最新commit id和master所指向的一致。

上恢复重置的命令 git reflog:

先用这个命令看看前四次log记录:


使用git reset重置到master@{2}:

查看当前commit 记录,重置成功:

现在我要回到重置之前的状态,首先找到重置前的master指向的commit的id:


然后执行重置:

继续查看commit记录,成功:

 Git历史版本穿梭(涉及GitHub相关操作)_第3张图片

补充:若你的提交已经push到了远程库中,重置后的master指向若和远程库中不一致,那么会阻止push。以GitHub为例,出现下面:

Git历史版本穿梭(涉及GitHub相关操作)_第4张图片

这时你只能强制push:

这种操作在多人协同的库中谨慎使用。

 

3、git reset进阶。

git reset --hard <commit> --- 执行123,即将master、暂存区、工作区全部重置
git reset --soft <commit> --- 只执行1,也就是指修改引用的指向,不修改暂存区、工作区
git reset --mixsd <commit>(git reset <commit>) --- 执行12

 Git历史版本穿梭(涉及GitHub相关操作)_第5张图片

注:<commit>不写的话默认为HEAD,HEAD^指HEAD的父提交,否则都是用master@{n}表示。

你可能感兴趣的:(git,版本裤穿梭)