文章目录
- Intro
- 操作命令
- -n 选项
- 参考
Intro
在开发过程中,有的时候一开始只是一个小需求,可以改着改着事情超出了控制,比如说我一开始只是想调整一个依赖包的版本,可是改到后来类库不兼容甚至导致项目无法启动。
这个时候我就想,如果这个代码库能回到当初该多好啊,就回退到我最近的提交之前。
操作命令
NOTE: 操作之前,请确保本地工作空间是干净的,没有新的改动(可通过git status
查看)。
# 查看commit列表,主要是要查看 revert 命令中要用到的 commit_id
git log --oneline
# 指定:从 COMMIT_ID_1(包含) 到 COMMIT_ID_2(包含)的所有commit的改动内容,全都回退。(那些提交点/历史,【依旧保留】)
git revert -n COMMIT_ID_1^..COMMIT_ID_2
# 查看有哪些文件有变动
git status
# 提交当前的改动
git commit -m "commit msg"
# 推送到服务器
git push
注意 git revert -n COMMIT_ID_1^..COMMIT_ID_2
中的两个提交点可以较短(即commitId前几位即可),
尖括号^
后面是两个点。
-n 选项
如果想回退三个提交点:commitA, commitB, commitC,则:
git revert commitA^..commitB
的结果: commitA, commitB, commitC, commitC_revert, commitB_revert, commitC_revert.
git revert -n commitA^..commitB
的结果: commitA, commitB, commitC. 需要紧跟着git commit -m "提交信息"
之后才会有新的提交点。
参考
git 还提供其他的方式来回退到之前的状态,见:Git后悔药 — 32、revert撤销(一)
但是每种方式各有特点。
你把代码内容回退到之前,那之前的那几个提交点还要不要保留(要不要留痕)?
要的话就得用git revert
,而不是 git reset
你有没有权限删除之前的某几个提交点(有些公司会对代码库的不同分支的权限作比较严格的限制)?
如果没有权限,就得用 git revert