git撤销及回滚命令
- 工作区:指在自己本地分支开发,未进行 git add 操作之前。
- 暂存区:执行过 git add 操作之后,但是为执行 git commit 操作。
- 本地分支:执行过 git commit 操作,但是未执行 git push 操作。
- 远程分支:执行过 git push 操作。
git reset
分三种场景
- 暂存区(执行了 git add 操作 未执行 git commit 操作)
git reset HEAD . //撤回所有 add 的文件
git reset HEAD 文件名 // 撤回指定的文件,这个命令只改变暂存区代码,并不影响其他区域代码。
- 尚未远程推送(还未git push操作),只保存在本地仓库
git log //查询提交日志 找到自己需要回滚的 版本号(commit_id)
// 以下三种方式
git reset --hard commit_id //撤销commit提交以及代码的修改
git reset --hard HEAD^ // 回退到最近一次的提交
git reset commit_id // 仅仅撤销本地仓库的commit提交,代码不变
git reset 的几种模式
git reset
主要有–soft –mixed –hard
三种方式
HEAD^ 的意思是上一个版本,也可以写成HEAD~1
如果你进行了2次commit,想都撤回,可以使用HEAD~2
–mixed (常用
,默认这种方式)
不删除工作空间改动代码,撤销commit,并且撤销(git add .) 操作
这个为默认参数,git reset --mixed HEAD^
和git reset HEAD^
效果是一样的。
–soft
不删除工作空间改动代码,撤销commit,不撤销git add .
–hard (慎用
)
删除工作空间改动代码,撤销commit,撤销git add .
如果 commit 注释写错了,我们可以使用
git commit --amend -m "备注"
既可以覆盖上一次的备注信息。
- 已经远程推送(已经git push操作了),远程仓库已经保存
第三种场景进行撤回的命令和第二个场景撤回命令一样。此时如果用“git push
”会报错,因为我们本地库HEAD指向的版本比远程库的要旧, 需要进行git push -f origin branchName
操作。
注意:一定要注意回滚指定版本号,不应该是最新提交的版本号,而应该是最新一次commit之前的版本号,否则无法进行回滚的。
git revert
git revert是用于“反做”某一个版本,以达到撤销该版本的修改的目的。
适用场景: 如果我们想撤销之前的某一版本,但是又想保留该目标版本后面的版本,记录下这整个版本变动流程,就可以用这种方法。
你在当前分支上做了几次提交,突然发现放错了分支,这几个提交本应该放到另一个分支。
新建一个 feature 分支,指向当前最新的提交
注意,这时依然停留在当前分支
git branch feature
切换到这几次提交之前的状态
git reset --hard [当前分支此前的最后一次提交]
切换到 feature 分支
git checkout feature
参考:
http://www.ruanyifeng.com/blog/2019/12/git-undo.html
https://blog.csdn.net/yxlshk/article/details/79944535
https://www.cnblogs.com/ming-blogs/p/13218420.html