git回滚代码命令
一、reset命令
回滚代码是我们程序员经常要操作的,如果你喜欢用 Git 命令行,也可以使用 git revert
这种,但它是有回滚痕迹的,会多一个提交记录,今天就介绍一些没有痕迹的理想状态的回退。
1、未提交
未提交有以下两种情况:
1)已经在工作区修改了文件,但还未执行 git add
提交到暂存区。
2)已经执行了 git add
提交到暂存作,但还未执行 git commit
提交本地仓库。
这时候回退:
git reset --hard
这样等于清空了暂存区和工作区,本地仓库回退到了最新的提交状态。
2、已提交未推送
这种情况是指已经执行了 git add
提交到暂存区操作,又执行了 git commit
提交本地仓库,但还未 git push
推送到远程仓库。
2.1 上个版本回退:
git reset --hard HEAD^
2.2 多个版本回退:
git reset --hard HEAD~N
N:代表数字,要回退的次数。
2.3 指定版本回退:
git reset --hard <commit_id>
2.4 直接回退到远程最新版本:
git reset --hard origin/master
注意:以上方式回滚后提交的东西也就没有了,如果只是想撤销提交,需要保留可以通过git revert命令操作一下。
3、已推送
这种情况是指已经执行了 git add
提交到暂存区操作,又执行了 git commit
提交本地仓库,还执行 git push
推送到远程仓库。
参考上面的 2.1~2.4 的方法,先强制回退到本地仓库到上 N 个版本,再进行强制推送到远程仓库。
回退到上个版本示例:
git reset --hard HEAD^ git push -f
二、Git恢复之前版本的两种方法reset、revert
使用git的每次提交,Git都会自动把它们串成一条时间线,这条时间线就是一个分支。如果没有新建分支,那么只有一条时间线,即只有一个分支,在Git里,这个分支叫主分支,即master分支。有一个HEAD指针指向当前分支(只有一个分支的情况下会指向master,而master是指向最新提交)。每个版本都会有自己的版本信息,如特有的版本号、版本名等。如下图,假设只有一个分支:
方法一:git reset
原理: git reset的作用是修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本,如下图所示,假设我们要回退到版本一:
适用场景: 如果想恢复到之前某个提交的版本,且那个版本之后提交的版本我们都不要了,就可以用这种方法。
方法二:git revert
原理: git revert是用于“反做”某一个版本,以达到撤销该版本的修改的目的。比如,我们commit了三个版本(版本一、版本二、 版本三),突然发现版本二不行(如:有bug),想要撤销版本二,但又不想影响撤销版本三的提交,就可以用 git revert 命令来反做版本二,生成新的版本四,这个版本四里会保留版本三的东西,但撤销了版本二的东西。如下图所示:
适用场景: 如果我们想撤销之前的某一版本,但是又想保留该目标版本后面的版本,记录下这整个版本变动流程,就可以用这种方法。
原文链接:https://blog.csdn.net/xiaowanzi_zj/article/details/121394466
前面说的版本回退git reset ;这种重置法,假如有 A,B,C,D四个版本,假如从D版本回退到B版本,Head指针一换,C,D版本没了。
假如我们依然需要,C,D版本,我们可以用git revert commit;
git revert功能更加强大,比如我们删除了一些提交操作,都可以撤销,把删除的文件找回;
他的底层是会搞出一个新版本,然后HEAD指针指向他;
比如我们删除一个代码文件,
然后找到一个删除提交操作行,右击->revert commit
三、idea如何使用【Revert Commit】
1.先说结论
针对任何一个代码记录都进行Revert Commit操作:
①不管此记录是commit未push,还是已经push过;
②不管此记录之后有没有其他的多次commit或push’记录
总之都会生成一个新的Revert "xxx"记录,接下来你想commit就commit,想push就push。
2.操作步骤
1.我有三个记录
这三个记录可以是只commit未push,也可以是push过,无所谓。
2.随便选择一个进行Revert Commit,我选择"test1"
3.点击Revert Commit立刻弹框如图
4.然后你点击Commit按钮,记录窗口会立即显示一个新的记录
5.这会你push就行
参考文章:
https://mp.weixin.qq.com/s/b7jlfhvVNeqPAcHlppURrg
https://blog.csdn.net/yxlshk/article/details/79944535
https://blog.csdn.net/qq_23167527/article/details/110149722