这是我参与11月更文挑战的第5天,活动详情查看:2021最后一次更文挑战
时光倒流(版本回退)
我想大部分同学使用git的最初的动力就是因为这个功能吧。
现在我们对readme文件进行修改,再随便添加些东西,然后readme内容就变成下面这样
hello git
hello git 2.0
然后再次add commit。
现在我们的仓库里有两个版本了,我们可以用下面的命令查看git的提交历史
git log
显示结果
commit b5934a2d9f80d257ca50b9b80a4b31d5bb9fe03c
Author: = <woody@gmail.com>
Date: Sun Jan 22 16:27:59 2017 +0800
第二次提交
commit 3eb5f7721cb86c617faf0d2ad13a5cee9d1a3764
Author: = <woody@gmail.com>
Date: Sun Jan 22 16:16:10 2017 +0800
创建readme.txt文件
注意:commit字段是自动生成的,所以你的结果一定与我的不一样,以你的为准
好了,下面下面我们将readme.txt回退到最开始创建的状态。git使用HEAD表示当前的版本,就是最新的版本。 上一个版本是HEAD^,再上一个版本是HEAD^^,上一百个版本是HEAD~100(当然你也可以打100个^)。 使用下面的命令回退到指定版本
git reset --hard HEAD^
HEAD is now at 3eb5f77 创建readme.txt文件
看看内容改了没有。 现在我们再查看下log,结果如下:
commit 3eb5f7721cb86c617faf0d2ad13a5cee9d1a3764
Author: = <coder.0012ff7c@gmail.com>
Date: Sun Jan 22 16:16:10 2017 +0800
创建readme.txt文件
好了,时光倒流成功!但是悲哀的发现我们回不到未来了。还是有办法的,--hard 参数支持commit值。 就是说你可以在--hard后面跟一个commit值,就能跳到那个版本。 执行下面的代码
git reset --hard b5934a
HEAD is now at b5934a2 第二次提交
不用将所有的字符都写上,只要能区分出不同就好,git会自动去匹配
但是万一找不到commit值呢,没关系。使用下面的命令可以查看所有的历史
git reflog
显示结果:
b5934a2 HEAD@{0}: reset: moving to b5934a
3eb5f77 HEAD@{1}: reset: moving to HEAD^
b5934a2 HEAD@{2}: commit: 第二次提交
3eb5f77 HEAD@{3}: commit (initial): 创建readme.txt文件
最前面那串字符就是。好了。搞定!
时光倒流(revert方式)
这种操作存在一个问题,服务器上的代码虽然被还原了,但假如有多个人在使用,他们本地的版本依然是比服务器上的版本高的,所以,别人再重新提交代码的话,你撤销的操作又会被重新,你上面的操作也就白操作了。解决办法是,让别人把本地的分支先删掉,然后重新从服务器上拉取分支。
这个时候我们就可以使用 revert 方式来回滚。这种方式不会把版本往前回退,而是生成一个新的版本。所以,你只需要让别人更新一下代码就可以了,你之前操作的提交记录也会被保留下来。
首先找到你需要回滚的版本号。然后执行以下命令:
git revert -n 版本号
git commit -m xxxx 提交
git push 推送到远程
这样就可以了,其他人可以获取到当前版本的代码了