您的位置:首页 > 其它

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

2015-12-20 16:22 274 查看
注:本文翻译自这里

撤销“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 reflog
git 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之上接着开发。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  git