如果最新的这个提交被推送,则使用:
git revert HEAD
他会创建一个新的提交,用来撤销最近的推送,但是不会改变项目历史,在log中还是会看到你的那个错误的远程推送历史;
即:假如有DCBA的四个提交,D是最新的;【git范围执行语法,包含起点不包含终点】
git revert HEAD #撤销D【最新的提交】
git revert HEAD~1 #撤销C【最新的提交的前一个提交】
git revert HEAD~2 #撤销B【最新的提交的前两个提交】
git revert HEAD~2..HEAD #起点B终点D,包含起点不包含终点,所以撤销BC;
HEAD~n 是从当前提交(HEAD)往回算第n个提交
HEAD
或HEAD~0
将指向最近的提交 D,HEAD~1
往回算第二个提交 C,HEAD~2
往回算第三个提交 B,HEAD~3
往回算第四个提交 A。
如果这个提交未被推送,则使用:
git reset --soft HEAD~1
会将当前分支回滚到上一次提交的状态,并且移除最近的一次提交记录。
--hard
:这个选项会把你的工作目录和暂存区都恢复到指定提交(例如HEAD~1
)的状态。一般来说,所有在选定提交之后的更改都会被清除。--mixed
:这是git reset
的默认模式。这会将暂存区恢复回指定提交的状态,但不会改变工作目录。也就是说,所有在选定提交之后的未提交的更改都仍然存在,但会被标记为"未暂存"(也就是说,这些更改需要重新git add
然后git commit
才能被提交)。--soft
:这个选项只重置HEAD
到指定的提交,不会改变暂存区和工作目录。也就是说,所有在选定提交之后的更改都仍然存在,并被标记为"已暂存"(也就是说,这些更改只需要git commit
就可以直接被提交,不再需要git add
操作)。
HEAD~1,上一次,HEAD~2,前两次;
撤销上一次合并后的提交;
如果你是合并了`master`分支到当前分支,并且想要撤销这次合并操作,那么执行 git revert -m 1 HEAD
命令通常就是你想要做的。
在 git revert -m 1
中,`-m 1`指的是你想要选择合并操作时的第一个父节点(通常是当前分支,而第二个父节点通常是被合并的分支)。这条命令将会创建一个新的提交,撤销对`master`分支的合并。
运行了该命令之后,你需要做的是将这个变更推送到远程版本库:
git push
再次强调,请在运行这些命令前确认无误,否则可能会对你的代码造成无法撤销的改变。