码迷,mamicode.com
首页 > 其他好文 > 详细

git学习之旅(四)——回退版本

时间:2015-08-09 17:12:47      阅读:89      评论:0      收藏:0      [点我收藏+]

标签:git

本地合并提交或修改提交说明

  • cd ~/user
  • mkdir sample2
  • cd sample2
  • git init
  • echo "1" > user.txt
  • git add .
  • git commit -m "NO.1 commit"
  • echo "2" >> user.txt
  • git add .
  • git commit -m "NO.2 commit"
  • echo "3" >> user.txt
  • git add .
  • git commit -m "NO.3 commit"
  • git log

技术分享

  • cat user.txt

技术分享

新建一个仓库,生成3次提交,每次提交只是简单的在user.txt文件后追加一个数字

之前已经介绍过git reset --hard是连同工作区一起彻底回退,后面的接的参数为HEAD~2,表示回退2次的提交,也可以用HEAD^^,还可以使用哈希值(SHA1),哈希值可以不全写,只要能区分不同提交就可以。

现在我们将NO.2和NO.3的提交合并一起再提交,这时使用git reset就可以了,保留工作区的内容。

  • git reset HEAD^^
  • git add .
  • git commit -m "NO.2 and NO.3 commit"
  • git log

技术分享

  • cat user.txt


技术分享

修改结果与之前一样,但log的结果已经变化了

  • git reset --hard HEAD^

回退错误的操作

如果我们错误操作连同工作区也回退了,就是修改都没了,也有办法回退操作

  • git reflog

技术分享

查看到之前执行过的操作,可以查看到前一个操作所在的提交(commit)的哈希值ee78fd6

技术分享

  • git reset --hard HEAD@{1} ( git reset --hard ee78fd6)

使用git reset --hard执行回退,--hard工作区也一起回退


服务器上回退提交

如果的把错误的提交更新的服务器,就不能使用git reset回退了

  • cd ~/user1
  • git clone --bare sample2 ~/repo/sample2.git

因为之前没有在服务器上建立远程仓库,先克隆一份裸的版本,再复制到服务器。因为是本地模拟服务器,所以直接克隆到相应目录

  • 技术分享

将user.txt修改成以上所示

  • git add .
  • git commit -m "error commit"
  • git remote add origin service_name@127.0.0.1:repo/sample2.git
  • git push origin master

因为服务器的版本是本地复制的,所以本地版本没有自动将service_name@127.0.0.1:repo/sample2.git命名为origin,所以我们要设置一下以方便以后提交。

  • git revert HEAD

技术分享

自动生成的提交说明,不修改,ctrl+x退出

  • git log

技术分享

  • git push origin master

这样就能回退最近一次的提交,当然也可以回退到更早以前的提交,但只回退单次提交,例如回退前一次提交HEAD^(NO.2 and NO.3 commit),那么第一次的提交HEAD(error commit)不会被回退,还会存在。不会像reset那样将该提交以后的版本都一起回退。

  • git diff HEAD^

技术分享

使用git diff查看修改的详情,可以看出只是将要回退的提交的删除和添加的内容做了一次反操作,所以revert只回退单独一次提交的结果

版权声明:本文为博主原创文章,未经博主允许不得转载。

git学习之旅(四)——回退版本

标签:git

原文地址:http://blog.csdn.net/qazqwdxz/article/details/47376963

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!