

git checkout -- com/qiaqia/Hello.java


git reset HEAD


1、使用 HEAD^ 来描述版本,一个 ^ 表示前一个版本,两个 ^^ 表示前两个版本,以此类推。
2、使用数字来代替 ^,比如说前 20 个版本可以写作 HEAD~20。
3、直接写版本号,表示跳转到某一个版本处。我们每次提交成功后,都会生成一个哈希码作为版本号,我们不用全部输入,只需要输入前面几个字符即可,就能识别出来。







1、git reset --soft(推荐) :这个命令将会重置 HEAD 指针到指定的提交,但是会保留暂存区和工作目录的修改。意思是:之前提交的改动会被放回到暂存区(绿色),(撤销了commit,你可以重新commit它们)。


2、git reset --mixed :这个命令将会重置 HEAD 指针到指定的提交,并且会重置暂存区,但是会保留工作目录的修改。意思是:之前提交的改动会被放回到工作目录(红色),不会被放入暂存区(撤销了add,和commit两个动作)。

3、git reset --hard :这个命令将会重置 HEAD 指针到指定的提交,并且会重置暂存区和工作目录,使它们与指定的提交完全一致。这意味着之前提交的改动会被彻底删除(撤销并且不保留,暂存区也没有)。


原理图:加入当前版本是V4,git reset --hard则会将指针直接指向V3,舍弃V4

1.4 远程仓库撤销
如果代码提交到远程仓库了,想要撤销,那就如 1.3 小节所讲,先在本地仓库撤销,然后 push 到远程仓库即可。

1.4.2:使用git revert 版本号撤退
假设你现在版本号是V3,你想回退到V3,git revert的效果是保留v4,基于v3的"反做"生成了V5版本。

适用场景:如果我们想撤销之前的某一版本,但是又想保留该目标版本后面的版本,记录下这整个版本变动流程,就可以用这种方法.
语法:
git revert commit-id
演示:此时"第2次提交"已经提交add和commit 但是没有push,此时我想撤退.
注意:这里选择的是最后一个。
选择之前提交记录的会有冲突,这是因为Git会尝试将更改从历史提交中还原到当前分支,并且如果这些更改与当前代码存在冲突,就会导致冲突的发生,需要手动解决冲突(后面有演示)




3、推送撤销的更改:如果你需要将撤销的更改推送到远程仓库,可以使用 git push 命令将新的撤销提交推送至远程仓库。


2、提交到本地仓库的代码想撤销
方式1:撤销提交(Undo Commit)
这个操作只能在最近一次提交上使用,不能在其他提交上使用,最近一次 commit 上,右键单击,如下图:





“第2次提交”的代码已经撤回了。同时生成了一次提交记录。

注意:上面的操作是选择最后一次,如果选择更早的版本会发生冲突,这是因为Git会尝试将更改从历史提交中还原到当前分支,并且如果这些更改与当前代码存在冲突,就会导致冲突的发生。
演示:此时我想回滚到第一次提交。


弹窗,让我们解决冲突

已经解决完的冲突

编辑要基于第一次提交生成的commit messgae,点击提交


方式3:选择前一个版本,右键,选择“将当前分支重置到此处”

选择软:关于这几个选的的解释,我们在文章中已经解释过了。保留的意思是,回退到之前的,并保存此时状态是为commit ,等待push,一般不选这个。

此时代码已经撤退了,你可以继续撤退,或者修改后再次commit、push

其实这个弹框我们还能用另外一种方式:

这里依然可以选择,软、硬、混合模式

跟步骤三一样,先在本地仓库撤销,撤销完成后,重新修改代码,最后再 force push 就行了。






