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只回退单独一次提交的结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值