赞
踩
假设我们现在有三个提交C1~C3,现在HEAD指向C3,
当我们执行下面语句时:
git reset --soft HEAD~1
此时HEAD指向C2,当前C3的改变保存在暂存区,可以通过git status
查看,如下图所示
此时只要再执行git commit
,就可以恢复到最初始的样子。
--mixed
是git reset
的默认选项git reset --mixed HEAD~1
还是上面的例子,提交前和提交后的图和--soft
一模一样。不同的是,执行git status
,会显示C3的改变还未add到暂存区,但保持工作区不变。此时执行git commit
,不会发生任何事。所以执行以下指令,即可恢复到最初始的样子
git add .
git commit -m "message"
git reset <commid id>
,那么git reset <file>
起什么作用呢?
<file>
从暂存区中移除,它不会将工作区中该文件的内容替换成要从暂存区中移除的文件的内容--hard
选项会更改HEAD指针、暂存区和工作区的内容。如果执行下面语句:
git reset --hard HEAD~1
那么C3的变化、暂存区中还没有提交的变化、工作区中所有的变化都会被移除,而将工作区替换为C2的commit。
如果你想撤销一个你已经提交到远程仓库的commit,可以调用git revert
来在本地撤销,然后push
到远程分支上。
git reflog #得到待撤销commit的hash值
git revert <hash-id> #撤销
git push #推送到远程
如果你已经执行了git reset --hard
,将一个commit从分支中去除了,还是可以恢复的,执行下列指令恢复:
git reflog #找到对应commit的hash值
git checkout -b <branch-name> <hash-id> #恢复
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。