git撤销大全(reset、reflog、revert、checkout、rebase、rm)

注:本文翻译自这里

撤销“public”修改

场景:

你使用git push将本地更改发布到github上,突然意识到这个commit有点问题,不能push上去,你需要撤销这个commit。

撤销:

git revert < sha >

译者注:sha是commit的hash至,通过git log命令可以查看到。

做了什么:

git revert创建了一个与sha所代表的commit的“相反”的commit,这个新的commit会将sha commit所做的一切撤销。

修改最近一次commit message

场景:

如果你git commit -m "fixed bug #42",之后你意识到应该是git commit -m "fixed bug #41",这是该咋办。

撤销:

git commit –amend -m “fixed bug #41”

做了什么:

git commit --amend仅仅改变了上一次commit的message,其他什么事儿也没干,可以放心使用。

撤销“local”修改

场景:

一只猫跳到你键盘上,破坏了你正在编辑的文件,正在编辑的内容乱了一塌糊涂,这是你想把文件恢复到上次commit的状态。

撤销:

git checkout – < bad file >

做了什么

git checkout改变当前工作目录中的文件到指定状态。你可以指定分支名或者sha。如果没有指定,默认执行的是git checkout HEAD。HEAD代表当前分支的最后一次commit。

重置本地修改

场景:

你已经在本地开发了一段时间了,有了几次本地commit,但是你感觉最近三次commit写的不好,想推倒重来,就像没有这三次commit。

重置commit:

git reset < last good sha> or git reset --hard < last good sha >

做了什么:

git reset会将你的commit重置到指定的某个commit上,而之后的那些commit就想没有提交过一样。默认情况下,git还会为你保留这些commit,只不过对你来说透明感觉不到而已。如果你加上--hard参数,git就真的把这些commit给“扔掉”了。

重做最近的撤销

场景:

你commit了几次,然后使用git checkout --hard撤销了这几次commit。这是你又想重做这几次commit。后悔药还是有的。

重做:

git reflog and git reset

干了什么

git refloggit log类似,都会列出commit记录,不同的是git log只会列出正式生效的commit记录,不能列出HEAD在commit之间跳转的记录。
我们先通过git reflog查找到被git checkout --hard“抛弃”掉的那几次commit的sha值。然后通过git reset恢复到想要的commit上去。

分支

场景:

commit了几次后发现错误地commit到了master分支上了,你只是想commit到feature分支上。

撤销:

git branch feature然后 git reset --hard origin/master 最后git checkout feature

译者注:origin/master这个特殊的名字代表着与远程仓库一致的那次提交。

做了什么:

首先,git branch feature新建了一个feature分支,这个包涵了这几次commit。然后git reset --hard origin/master将commit状态回滚到这几次commit之前,好了,master分支“干净”了。最后使用git checkout feature切换到feature分支上,在这几次commit之上接着开发。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值