Conan
Conan
发布于 2024-01-15 / 59 阅读
0
0

Git回滚到上次提交前

如果最新的这个提交被推送,则使用:

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个提交

  • HEADHEAD~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

再次强调,请在运行这些命令前确认无误,否则可能会对你的代码造成无法撤销的改变。


评论