本文通过案例讲解 git reset 、 git revert 、 git checkout
在版本控制中的作用;
小明:完了,完蛋了洋仔:怎么了,一惊一乍的
小明:我把错误代码用git commit后还push到线上代码库了! 这可怎么办!洋仔:莫慌,git有“后悔药”!
洋仔:容我给你慢慢道来。但是我们要先知道一些git的基础知识,你才能更好的理解git命令的作用
Workspace
:工作区(当前用户操作修改的区域)Index / Stage
:暂存区 (add后的区域)Repository
:仓库区或本地仓库(commit后的区域)Remote
:远程仓库(push后的区域)add
–>暂存区–>commit
–>本地仓库区–>push
–>远程仓库区fetch
–>使用refs\remotes下对应分支文件记录远程分支末端commit_id 和 本地仓库区 -->merge
–>工作区pull
–>使用refs\remotes下对应分支文件记录远程分支末端commit_id and 本地仓库区 and 工作区commit_id1
--> commit_id2
--> commit_id3
--> commit_id4
git reset
即可完美解决~洋仔:小明,你的这个就可以用git reset 这个命令来完美的搞定,下面我们看一下如何解决
git log
commit id:commit_id4
这一次提交;commit id:commit_id3
,我们要将修改回滚到commit_id3
的时刻!小明:我想要把我刚才 commit的修改保留下来,我修改的代码不能给我删除掉呀! 洋仔:没问题
git reset <commit_id>
当前场景下就是:git reset commit_id3
Workspace
中小明:啊哈,这样的话我就可以把错误代码修改后再提交了;但是我已经push到线上仓库的数据怎么办呢? 洋仔:别急,有办法~
git add <file_name>
and git commit
当前场景下:git add .
and git commit
commit_id4
提交记录消失,取而代之的是我们更新代码后提交的记录commit_id5
;这样就完成了本地的代码修改和更新$ git log
commit commit_id5 (HEAD -> master)
Author: test
Date: Thu Aug 20 16:28:45 2020 +0800
第三次修改README文件-更新错误后提交
commit commit_id3 (HEAD -> master)
Author: test
Date: Thu Aug 20 16:28:45 2020 +0800
第二次修改README文件
commit commit_id2
Author: test
Date: Thu Aug 20 16:28:19 2020 +0800
第一次修改README文件
commit commit_id1
Author: test
Date: Thu Aug 20 16:26:59 2020 +080
初始化项目
git push origin HEAD --force
洋仔:好了,小明,你的问题完美解决了 小明:哦吼,但是我还有一个问题:如果我想要不保留回滚commit的修改,直接删除掉修改!该怎么处理呢?
洋仔:简单~ 我们整体看一下 git reset 命令
commit_id1 --> commit_id2 --> commit_id3 --> commit_id4
commit_id2
上,对于commit_id3 和 commit_id4 和本地当前的修改,对于不同的参数param,会有不同的处理;git reset --soft commit_id
git reset commit_id
等同于 git reset --mixed commit_id
git reset --hard commit_id
小明:原来git reset这么强大呀! 但是我这还有个问题:
洋仔:(这么多问题,幸亏我懂,要不这次就丢大了。。) 简单!git revert 命令!
git revert -e commit_id
git revert -n commit_id
将commit_id中修改,放到index区,我们可以对他重新做修改并重新提交小明:还有这种操作,可以直接单独操作提交过程中的某一个commit!太棒了!
小明:还有最后一个问题:
如果我在一次开发中,发现某个文件修改错误了,想要将文件恢复到刚pull代码时的状态怎么办呢?
洋仔:简单!看git checkout解决这个问题!
git checkout
可以git checkout <branch_name>
切换分支git checkout -b <branch_bame>
创建分支等操作git checkout -- <file_name>
git add
或者 git commit
时的状态!小明:太棒了,以后再也不怕提错代码了!
不用慌错误的commit了,撒花~
联系客服