首页 > 解决方案 > 如何在不丢失更改的情况下恢复提交?

问题描述

我对撤消提交但不撤消更改本身的所有各种机制感到困惑..

在我的情况下,我的提交历史是这样的。

original commit

dataclass added

controllerclass added

controllerclass and dataclass fixes

我想要回到的是我在执行commit -m 'controllerclass and dataclass fixes'and之前的状态git push origin master
命令。也就是说,我希望源保持原样,但在提交之后有一堆未提交的本地更改controllerclass added,但当前源保持不变。

我想我想做的是git revert HEAD,但我不确定 revert 是否只会将我的代码设置为“添加了控制器类”的状态,并且我所做的所有后续更改都将丢失。

标签: git

解决方案


git revert将创建一个新的提交,恢复您在给定提交中对存储库所做的更改;它不会更改您当前的任何提交。这在您不想回滚历史但特定更改被破坏或需要以不同方式完成的项目中很有用。

听起来你想要的是git reset --soft HEAD^. 这会将您的最后一次提交倒回为“添加的控制器类”提交,然后将最新提交中的更改留待提交。如果您不想暂存更改,请git reset --mixed HEAD^ 改用.

请注意,这会倒回历史记录,因此如果您已经推送了更改,则需要通过+在分支名称(例如 )之前放置一个加号 ( ) 来强制推送到服务器git push origin +master。如果你正在和其他人一起做一个项目并且已经推动了,那么最好承认你犯了一个错误并git revert改用它。


推荐阅读