git 代码回滚

262 阅读5分钟

git 提交模型

工作区 - 暂存区 - 本地仓库

代码编写及修改是在工作区  - git add 将本地修改添加到暂存区  - git commit  将暂存区中的内容提交到本地仓库 - git push 将本地仓库代码推送到远程仓库

image.png 未进行 push 的操作,本地的 commit 等操作线条是鲜绿色的,push 之后会变成暗绿色。

idea git commit之后,想撤销commit

image.png

image.png

To Cimmit:里面填写 HEAD~1 点击Reset即可撤销上次commit的内容;

下面会详细介绍Reset Type:Mixed To Commit : HEAD~1 具体是什么意思!!

` git add //添加要提交的内容 暂存区

    git commit -m "提交的描述:大家最好把此次提交的信息简单描述一下"   本地仓库



    执行完commit后,想撤回commit,怎么办?
    git reset --soft HEAD^

    这样就成功的撤销了你的commit

`

参数详解

To Commot:参数详解

HEAD^的意思是上一个版本,也可以写成HEAD~1

如果你进行了2次commit,想都撤回,可以使用HEAD~2或者HEAD^^,以此类推......

Reset Type:参数详解

首先了解:

工作区 - 暂存区 - 本地仓库

代码编写及修改是在工作区 - git add 将本地修改添加到暂存区 - git commit 将暂存区中的内容提交到本地仓库

--mixed (git reset的默认参数,即不添加参数的默认值) 意思是:不删除工作空间改动代码,撤销commit 和 撤销git add . 操作,回退到工作区

这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。

--soft
意思是:不删除工作空间改动代码,撤销commit,不撤销git add . 操作,

回退到git commit之前,此时处在暂存区。(即执行git add 命令后)

--hard 意思是:删除本地改动代码,撤销commit,撤销git add .

(三者的改变全都丢失,即代码的修改内容丢失,直接回退到某个版本;因此我们修改过的代码就没了,需要谨慎使用)

补充 hard类型,一定要慎用:

    README.md 我修改了并且提交,但是还未push

    README.en.md 是另外修改的文件,未提交

image.png 此时我要撤销我刚刚提交的内容 ,如下图:

但是如果你的类型选择的 Hard类型, 此时整个代码空间的代码都会被覆盖,意思就是你修改过的代码全部都没有了

image.png 可以看见, 刚刚的提交已经被撤销了,但是我本地修改的其他代码内容也被覆盖了,直接没有了,所以一定要慎用,如果你此时工作区还有其他功能未提交的代码,就都会被删除

image.png

git push 之后提交

git push 之后的提交再次回滚,回滚的内容都是在本地,没有push 之前回滚后的内容是不会同步到远程仓库中去的。

idea如何使用【Revert Commit】

Revert Commit 都会生成一个新的Revert "xxx"记录,接下来你想commit就commit,想push就push。

一.先说结论

针对任何一个代码记录都进行Revert Commit操作: ①不管此记录是commit未push,还是已经push过; ②不管此记录之后有没有其他的多次commit或push’记录 总之都会生成一个新的Revert "xxx"记录,接下来你想commit就commit,想push就push。

二.操作步骤

1.我有三个记录

image.png

这三个记录可以是只commit未push,也可以是push过,无所谓。

2.随便选择一个进行Revert Commit,我选择"test1"

image.png

3.点击Revert Commit立刻弹框如图

image.png

4.然后你点击Commit按钮,记录窗口会立即显示一个新的记录

image.png

5.这会你push就行

image.png

回滚远程仓库这三种作各有区别

image.png

git reset current branch to here

使用这种方式首先将黄色的指针头移动到 要reset 的提交,执行 push 之后,所有当前提交之后的提交全部清除。此时,如果使用的是 hard 方式本地代码无法找回。其他方式,可以按照自己的需要进行选择

image.png

image.png

image.png

 commit [revert]

image.png

对home1提交点击revert commit后,本地的代码先回滚。同时生成一个新的提交,将这个提交推送到远程仓库后, 就形成了 revert "home1"这个提交。   这种方式回导致本地的代码消失不见,找回的方式是通过local history 本地操作历史来恢复本地的代码。按如图按钮,回滚本地的这次操作。这个对远程当然是没有影响的。

image.png

undo commit

这种操作方式比较友好,点击undo commit并推送到远程后,本地文件未消失,仍然是原来未提交的状态。也没有revert commit操作后再分支历史记录留下的revert “home1”

适用情况:代码修改完了,已经Commit了,但是还未push,然后发现还有地方需要修改,但是又不想增加一个新的Commit记录。这时可以进行Undo Commit,修改后再重新Commit。

如果已经进行了Push,线上的Commit记录还是会存在的

简单来说,就是撤销了你Commit的这个动作。详细解释下:

1、首先,对项目进行了代码修改,然后进行commit操作。

image.png

2、确认Commit之后(未进行push)

image.png

3、进行Undo Commit操作

image.png

执行后和未Commit之前完全一样。

image.png

Drop Commit(慎用)

未push的Commit记录:

会删除Commit记录,同时Commit中对代码进行的修改也会全部被删除

已push的Commit记录:

区别在于线上的Commit记录不会被删除 1、修改代码,然后进行Commit

image.png

image.png

2、进行Drop Commit操作后

Commit 记录被删除,代码修改也被删除。

image.png

3、已push的Commit记录

image.png

回滚提交中的一个文件

首先在本地的提交记录中将这个文件回退,这时候本地回退到的是这个文件的上一个版本,然后将上一个版本push 到远程仓库。
找回自己新增代码的方式仍然是上边的本地历史进行恢复

image.png

image.png

image.png