git撤销大全(reset、reflog、revert、checkout、rebase、rm)
2015-12-20 16:22
274 查看
注:本文翻译自这里
译者注:sha是commit的hash至,通过git log命令可以查看到。
我们先通过
译者注:origin/master这个特殊的名字代表着与远程仓库一致的那次提交。
撤销“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 reflogand
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之上接着开发。
相关文章推荐
- RPC failed; result=22, HTTP code = 411
- git更新已經刪除的文件
- 提取Git每次提交后Commit的文件
- GIT迁移服务器
- 分布式版本管理git入门指南使用资料汇总及文章推荐
- git终极指南:在实际开发中的应用
- Git远程操作详解
- 25个 Git 进阶技巧(翻译)
- 详解版本控制利器Git,SVN的异同以及适用范围
- Ruby实现的删除已经合并的git分支脚本分享
- 在 Shell 提示符中显示 Git 分支名称的方法
- Git使用基础篇(一些常用命令和原理)
- git fork同步是什么意思?
- Git使用小坑 Out of memory错误的解决方法
- Python的高级Git库 Gittle
- 使用GIT进行源码管理――GUI客户端小结
- 使用git代替FTP部署代码到服务器的例子
- linux系统安装git及git常用命令
- 分享下自己总结的Git常用命令
- Git 常用命令速查表(图文+表格)