git 撤销操作: git reset
git commit之后,想撤销commit
写完代码后,我们一般这样
$git status //查看并确定自己修改的文件有哪些
$git add file_name //添加所有文件
$git commit -m "1.XXX;2.XXX"
执行完commit后,想撤回commit,怎么办?
注意:代码还没有git push 没有推到仓库,如果已经git push,另请高明
这时如果你希望撤销之前的commit操作,从而以这次的commit为准重新提交,那么你可以使用git commit --amend命令。
这个命令回将暂存区中的文件提交。如果自上次提交以来,你还未做任何修改,那么快照会保持不变,而你所修改的只是提交信息。如果有修改,那么会以第二次的提交为准。
另外一种方法:
$git reset --soft HEAD^
这样就成功的撤销了提交的 git commit
注意,仅仅是撤回commit操作,本地修改或者新增的代码仍然保留。就是说本地代码没有变动。
说一下个人理解:
HEAD^的意思是上一个版本,也可以写成HEAD~1
如果你进行了2次commit,想都撤回,可以使用HEAD~2
顺便说一下,如果commit注释写错了,只是想改一下注释,
只需要:
$git commit --amend
此时会进入默认vim编辑器,修改注释完毕后保存就好了。
git reset -h
其中HEAD代表版本库,index代表暂存区,另外还有一个我们增删改代码的工作区。所以官方解释翻译过来就是:
--hard : 回退版本库,暂存区,工作区。(因此我们修改过的代码就没了,需要谨慎使用)
删除工作空间改动代码,撤销commit,撤销git add .
--mixed: 回退版本库,暂存区。(--mixed为git reset的默认参数,即当任何参数都不加的时候的参数)
意思是:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作
这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。
--soft: 回退版本库。
不删除工作空间改动代码,撤销commit,不撤销git add 。
提交冲突场景:
1、你已经 git pull 更新到最新代码状态了,然后需要 git add 提交你的修改,这时别人向仓库提交了代码,你 git push 代码冲突了
使用: git reset --soft 提交commit号,将远端工作空间和本地工作空间更新到一致。
$ git status #查看状态
$ git log #看提交记录,然后找到你提交之前的代码节点,找到这个 git commit 号,假如是123456
$
$ git reset --soft 123456 #同步代码
$
$ git statu #这时看到你的提交,已经 git add 的文件
$
$ git commit 或者 git commit -m "XXX" #添加你的提交注释
$ git push #提交代码
然后查看远端代码仓库(最好用浏览器打开),确认一下提交的结果。
2、你已经执行了git add 操作,但是提交有代码没有修改好,想撤销 git add 提交
方法一:同第一种情况;
方法二:那么你可以使用命令git reset HEAD <撤销的文件> 来取消暂存;
方法三:如果不想要这次修改,可以使用 git checkout <撤销的文件> 回退文件,这样就放弃这次修改了。
最后一定要搞清楚: --mixed的情况下,版本库和暂存区都将进行了代码回退,工作区代码没动。