git回退版本

git的文件状态说明

这里写图片描述

  1. git checkout -- files
    把文件从暂存区域或历史记录中复制到工作目录,用来丢弃本地修改。
  2. git reset -- files
    用来撤销最后一次git add files,你也可以用git reset 撤销所有暂存区域文件。
  3. git reset [option] commitid
    用来撤销历史记录,option选项–soft,–hard,–mixed。
    这里写图片描述
    1. –soft只影响历史记录;
    2. –mixed影响历史记录,暂存区;
    3. –hard影响历史记录,暂存区,工作目录;

实例说明

假如git项目中有三个文件a.txt,b.txt,c.txt,目前处于已提交状态
当前a.txt的内容为
a.txt is a git file

这里写图片描述

1. 回退修改的文件(未add)

编辑a文件后
a.txt is a git file, i found something is wrong
发现写错了,想撤回到未修改之前,执行命令
git checkout -- a.txt
a.txt的内容重新变成了
a.txt is a git file

2. 回退已add到暂存区的文件(未commit)

继续修改a.txt,内容最终为
a.txt is a git file, i want commit it
执行命令
git add a.txt
突然任性不想提交这个内容了,怎么办
回退执行命令
git reset --hard
a.txt的内容重新变成了
a.txt is a git file

这里有一个问题,假如同时修改了a.txt,b.txt两个文件,执行上面的命令也会把b.txt回退,如果这种情况可以:
git reset只会清空暂存区,并不影响工作目录
git checkout -- a.txt从历史记录把a.txt复制到工作目录,就可以单独回退a.txt了

3. 回退已commit的文件

当天小酌了一杯,不小心把a.txt
a.txt is a git file, i want commit it
提交了。

git add a.txt
git commit -m "a.txt commit"

回退执行命令
git reset --hard HEAD~1
谢天谢地,a.txt又回到了
a.txt is a git file

这里同样有一个问题,假如同时提交了a.txt,b.txt两个文件,执行上面的命令也会把b.txt回退,如果这种情况可以:
git reset HEAD~1历史版本回退,历史版本复制一份到暂存区,并不影响工作目录
git checkout -- a.txt从暂存区把a.txt复制到工作目录
最后把b.txt重新提交下

git add b.txt
git commit -m "回退a.txt"

如果不想回退了,回到回退之前的版本
查看回退之前的版本号commitid
git reflog假如为如6558aa6
回到回退之前的版本
git reset --hard 6558aa6

回退中间某些提交

例如 E—F—G—H—I—J topicA,回退G的这次提交记录,可以执行
git rebase --onto F H J

4. 回退到某个时间段

git checkout `git rev-list -n 1 --before="2017-08-27 13:37" master`
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值