共计 2449 个字符,预计需要花费 7 分钟才能阅读完成。
@[toc]
上周的文章发了后,有小伙伴问如何在 IDEA 中进行 Git 的版本回退?
其实这个松哥之前写过文章,然而工夫长远了,所以明天再和小伙伴们从新捋一捋这个话题,顺便也来聊聊如何在 IDEA 中进行 Git 的版本回退。
Git 中的撤销操作,咱们能够演绎为四类:
- 工作区的代码想撤销
- add 到暂存区的代码想撤销
- 提交到本地仓库的代码想撤销
- 近程仓库的代码想要撤销
1. 基于命令行
1.1 工作区的代码想撤销
可能有一天我正在写代码,写了很久发现写错了,想复原到一开始的状态,一个笨办法就是把刚刚写的代码一行一行的删除,不过这种形式老本太高,咱们能够通过 git checkout -- <file>
命令来撤销工作区的代码批改。如下图:
首先咱们执行了 git status
命令,发现工作区是洁净的,而后执行了 cat 命令,发现文件只有两行内容,而后通过 vi 编辑器向文件中增加一行,保留并退出,退出来之后又执行了 git status
命令,此时工作区的状态曾经发生变化,而后咱们执行了 git checkout -- git01.txt
命令,示意撤销之前的操作,让 git01.txt
复原到之前的状态,该命令执行胜利之后,咱们再执行 cat
命令发现文件内容曾经复原了,此时再执行 git status
,状态也复原了。
1.2 add 到暂存区的代码想撤销
如果想要撤销,然而代码曾经提交到暂存区了,不必放心,也能撤销,分两个步骤:
- 将暂存区的代码撤销到工作区
- 将工作区的代码撤销 (具体操作和 1.1 大节统一)
将暂存区的代码撤销,咱们能够应用 git reset HEAD
命令来实现。如下图:
这里的代码都比较简单,外围的过程就是先执行 git reset HEAD
命令,从暂存区撤销,剩下的操作参考 1.1 大节。
1.3 提交到本地仓库的代码想撤销
同样的,提交到本地仓库的代码一样也能够撤销,咱们能够利用 git reset --hard < 版本号 >
命令来实现版本回退,该命令中的版本号有几种不同的写法:
- 能够应用
HEAD^
来形容版本,一个^
示意前一个版本,两个^^
示意前两个版本,以此类推。 - 也能够应用数字来代替
^
,比如说前100
个版本能够写作HEAD~100
。 - 也能够间接写版本号,示意跳转到某一个版本处。咱们每次提交胜利后,都会生成一个哈希码作为版本号,所以这里咱们也能够间接填版本号,哈希码很长,然而咱们不必全副输出,只须要输出后面几个字符即可,就能辨认进去。
看上面一系列的操作:
- 通过
git log
查看以后提交日志:
- 通过
git reset HEAD^^
向前回退两个版本:
- 查看日志,发现最初一次提交的版本号是
695ce1fe
, 利用git reset --hard 695ce1fe
命令回到回退之前的状态:
- 通过
git reset --hard HEAD~1
回到上一个版本:
当然以上操作都是基于命令行的,如果你命令行操作比拟纯熟的话,其实命令行操作比 IDEA 上点点点要快很多。
1.4 近程仓库撤销
如果代码提交到近程仓库了,想要撤销,那就如 1.3 大节所讲,先在本地仓库撤销,而后 push 到近程仓库即可。
2. 基于 IDEA
看懂了命令行操作,再看基于 IDEA 的操作就容易多了。
2.1 未提交就撤销
对于第一大节的前两种撤销操作,即批改的文件还没 commit,此时想要撤销,形式很简略,点击 IDEA 右上角的撤销按钮:
如果你批改了文件,无论有没有执行 git add
命令,只有没有 commit,都能够通过这个按钮撤销批改,点击该按钮,弹出如下提示框:
这里会列出来所有批改然而没有 commit 的文件,想要撤销哪个文件的批改,就勾选该文件,而后点击 Rollback 按钮就实现了撤销操作。
2.2 commit 了想撤销
如果曾经 commit 了,那么就须要先关上提交日志,点击如下按钮关上:
也能够间接点击 IDEA 右上角的时钟图标,疾速关上提交日志:
提交日志相似上面这样:
此时的回退就分状况了。
首先这个撤销操作分两种:
- Revert Commit
- Undo Commit
咱们别离来看。
2.2.1 Undo Commit
Undo Commit 这个操作只能在最近一次提交上应用,不能在其余提交上应用,最近一次 commit 上,右键单击,如下图:
其余的 commit 上右键单击:
既然如此,咱们就来看看最近的一次 commit 如何 Undo Commit。
在最近一次 commit 日志上右键单击后抉择 Undo Commit,如下图:
选中后,间接点击 OK,撤销最近一次的 commit。
这就是撤销最近一次 commit,撤销之后,本地的批改相当于变成了已 add 然而未 commit 的状态,此时咱们能够持续开发新代码,而后再 commit,再 push;或者也能够像 2.1 大节介绍的那样,持续撤销操作。
我电脑上的 IDEA 在这块操作中有个偶发性问题,就是撤销掉 commit 之后,IDEA 检测不到文件处于未提交状态,须要我把 IDEA 关掉从新关上,IDEA 就能发现文件处于未提交状态了,此时就能够依照 2.1 大节的步骤持续回退了,这块小伙伴们在试验的时候能够注意下。
2.2.2 Revert Commit
Revert Commit 这个操作到处都能用,不同于 Undo Commit,Revert Commit 之后,会产生一条提交记录。相当于 Revert Commit 其实也是提交,只不过提交的内容刚好相同,刚好刷掉已有内容。
Revert Commit 操作能够用在所有的日志上,而不仅仅是刚刚提交的 commit。
操作形式如下:
找到须要回滚的中央,右键单击,抉择 Revert Commit:
此时会弹出来一个提交的对话框,就是一个普普通通的 commit 对话框,如下:
commit 之后,能够看到内容曾经撤销了,提交日志中也多了一条记录,如下图:
2.3 push 了想撤销
如果曾经 push 到近程仓库了,怎么撤销?
其实跟 2.2 大节一样,先在本地仓库撤销,撤销实现后,从新批改代码,最初再 force push 就行了,不过 force push 的时候,留神别把共事的代码给笼罩了。
3. 小结
好啦,明天和小伙伴们分享了 Git 中的几个撤销问题,有问题的小伙伴欢送留言探讨呀~