git回滚主要分为本地回滚、远程回滚
在本地开发时,未 git push
之前我们都可以使用 git reset
进行回滚,当然,对于远程commit也是有效的,但不推荐,因为可能会冲掉其他人的 commit
记录,远程一般使用 git revert
进行回滚,下面就两种回滚方式进行具体说明。
git reset
在介绍 git reset
之前,我们先了解一下git中的区域划分:
- 工作区(WorkSpace):开发的环境
- 暂存区(Stage/Index):使用
git add
相关命令将工作区的代码提交到暂存区 - 本地库(Local Repo):使用
git commit
相关命令将工作区的代码提交到本地库 - 远程库(Remote):使用
git pu sh
相关命令将本地库推送到远程
借用网上的一张图片进行说明
在使用 git reset
之前,我们需要清楚 git reset
等同于 git reset --mixed
,除此之外还有 git reset --hard
、git reset --soft
git reset
是对HEAD指针的指向进行更改,历史记录中不会出现放弃的提交记录
git reset --hard
工作区、暂存区、本地仓库回滚到对应commit-idgit reset --mixed
工作区代码不受影响,但是暂存区、本地仓库区的代码回滚到对应的commit-idgit reset --soft
工作区和暂存区的代码不会受到影响,本地仓库区的代码回滚到对应的commit-id
可以看出来,这三者对于git区域的影响范围依次递减
注意:git reset
回滚不会对远程分支产生影响,所以在回滚完成进行 git push
的时候,会提示本地分支比较旧,需要先使用 git pull
拉取远程分支,由于我们的目的是回滚,所以当然不需要再拉取远程分支了,此时,直接使用 git push -f
强制推送本地回滚后的代码至远程。
- git reset –hard
# 回到其中你想要的某个版 - git reset –hard HEAD^ # 回到最新的一次提交
- git reset HEAD^ # 此时代码保留,回到 git add 之前
暂存区回滚时,我们也可以使用 git reset
git reset 可以将暂存区的代码回滚到工作区。当我们使用 git add
相关命令将修改内容提交到暂存区,此时又反悔了,可以使用 git reset HEAD .
或者 git reset HEAD a.txt
将代码回滚到未 add
之前。
git revert
git revert
理解为回滚但由又不是回滚,等于是重新commit了一个修改,抵消掉 git revert B
中指定的分支。
比如:我们commit了三个版本A、B、C,由于某些原因需要撤销 B
保留C
的更改,这个时候就可以用 git revert B
命令来反做 B
,生成 新的版本 D
,版本 D
中保留了 C
的代码, B
的修改被重置。
其他的回滚方式
工作区
工作区回滚,使用 git checkout
没错 git checkout 也可以回滚代码(或者叫“舍弃”)
- git checkout – a.txt # 丢弃某个文件,或者
- git checkout – . # 丢弃全部
如果我们对代码进行了一些修改,增、删、改,此时又不想要了,可以使用git checkout -- .
当然,还是推荐使用图形化工具,更顺手,而且不容易出错。
回滚远程仓库前记得提前通知团队其他成员!!!