这时,错误的提交 commit-5
和 commit-6
依然保留,将来进行甩锅的时候也有依可循 。而且,这样操作的话 HEAD 指针是往后移动的,可以直接使用 git push
命令推送到远程仓库里,而这种做法,正是企业所鼓励的 。
(2)git revert
移除某几次连续的提交的修改命令:git revert <commit新>...<commit旧>
(这里就不做演示了,同上)
注意:
- 含头不含尾,也就是撤销的提交,包含
<commit新>
,不包含<commit旧>
。 - 提交的顺序也是,最新的commit开头,然后往前到比较远的commit提交 。
- 移除过程中如果有冲突:不知道某次提交的修改内容,可以使用 git show查看修改内容 。Git冲突的时候会提示当前要还原的commit的id是多少,如上
error: could not revert d0c8e48... Revert "第5次提交,revert 撤销第4次提交"
。 - 过程中移除了几次提交的修改,也会相应的生成几次
revert commit
记录 。
-n
参数作用:
git revert
命令移除某几次的提交的修改,但是不要使用还原的更改创建任何提交,还原只是修改工作树和索引 。简写-n
,全称--no-commit
。命令:
git revert -n <commit新>...<commit旧>
(2)
-m
参数作用:
git revert
移除merge(合并)的修改内容 。简写:
-m parent-number
,全称:--mainline parent-number
。命令:
git revert [-m parent-number] <commit>
。说明:
如果我们需要还原的提交的是merge的操作,直接使用
git revert <commit>
的方式是不行的,会提示我们:error: commit ... is a merge but no -m option was given.fatal: revert failed
因为merge操作有两个分支,而revert不知道要还原哪个分支的提交,就没法进行还原\移除那些提交记录的修改的操作了,所以我们用-m 1
来告诉git revert
命令哪个是主线,哪个是非主线 。(选择主线就还原非主线,选择非主线就还原主线)另外,这个主线是1还是2是从哪里看出来的呢?
【二 『现学现忘』Git后悔药 — 33、revert撤销】我们可以使用
git show
命令查看,如果是普通的commit提交,通常会显示这个commit的id、作者、日期、备注、更改文件内容等;如果是merge的记录,则会显示merge 的commit-id,备注、日期和merge的主线和合并过来的id 。例如:
commit 63374e93eebd2b86882e5a4bb75dcd9d0e334b15Merge: bc64f61 72032b7Author: unknown [test@163.com](mailto:test@163.com)Date: Sun Jul 19 11:34:21 2020 +0800??Merge branch ‘testcopy2’ into testcopy
如上第二行,Merge: bc64f61 72032b7
,bc64f61
就是主线的id,编号就是1;72032b7
就是非主线的id,编号就是2 。此时,我们要把合并过来的分支的修改给还原掉,那么就可以指定1为主线,还原掉2的提交了 。6、
git revert
和git reset
命令的区别