git撤销本地提交
写完代码后,我们一般使用下面的命令提交代码
git add . #添加所有文件
git commit -m "代码提交" #提交代码
如果执行完commit后,想撤回commit,该怎么办?
使用下面命令即可撤回:
git reset --soft HEAD^ #撤销最近一次提交
这样就成功的撤销了最近一次的commit
本操作仅仅是撤回commit操作,写的代码仍然保留
说一下个人理解:
HEAD^ 的意思是上一个版本,也可以写成HEAD~1
如果你进行了2次commit,想都撤回,可以使用HEAD~2
至于这几个参数:
–-mixed 意思是:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作
这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的
–-soft
不删除工作空间改动代码,撤销commit,不撤销git add .
--keep
任何本地更改都将丢失,文件将恢复到所选提交的状态,但本地更改将保持不变。
你已经提交了,然后你又在本地更改了,如果你选keep,那么提交的内容会丢失,你提交后又本地修改未提交的内容不会丢失。
–-hard
文件恢复到所选提交状态,任何更改都会丢失。删除工作空间改动代码,撤销commit,撤销git add .
注意完成这个操作后,就恢复到了上一次的commit状态。
顺便说一下,如果commit注释写错了,只是想改一下注释,只需要:
git commit --amend
此时会进入默认vim编辑器,修改注释完毕后保存就好了。
撤销本地合并(merge)
git merge --abort
如何撤销远程提交(push)
第一种方式是使用git reset --hard
git reset --hard #撤销并舍弃指定的版本号之后的提交记录。使用需要谨慎。
示例:
git reset --hard 773b0e55ad81a55d2f964d530443931f25bce9d8
然后需要push到远程分支,但是直接git push, 是会报错的,因为本地版本落后于远程,需要强制推送命令
git push -f
然后查看本地和远程分支,可以看到我们的commit提交的那个版本没有了,版本回退到了提交之前的版本
这种强制提交,如果使用的是gitlab, 权限不是maintainer, 提交也会失败,需要找管理员提交。
注意:这种方式会把提交的代码直接舍弃,非常不建议使用!
第二种方式是使用 git revert 命令
这种方法非常适用于提交后报错一直解决不了的,前提是提交前项目可以正常运行
git revert 撤销。但是保留了提交记录。并且他是移除指定的提交。
获取需要回退的版本号,注意这里和上面的不一样,上面的是回退到之前的某一个版本,现在是撤销当前的版本。
- 1.执行
git log
命令 查看已经提交过的commit信息版本号 - 2.
git revert 版本号
,(例子git revert 773b0e55ad81a55d2f964d530443931f25bce9d8
) - 3.输入键盘 i 键,进入编辑状态,改一下提交的名称,
- 4.键盘Esc键,再去输入冒号 ,在输入 wq, 执行一下回车enter键,就ok了
- 5.然后再
git push
到远程分支,即可。
当然了你在第3个步骤的时候也可以不编辑,直接操作下一步就行,i ——> ESC ——> : ——> wq ——> enter ——>push
这种方式可以只回退某一个版本,并且回退之后,还会保留之前版本的记录。推荐
git一键更新所有的本地分支
for i in `git branch | sed 's/^.//'`; do git checkout $i ; git pull; done