git - 如何在不丢失更改的情况下恢复提交?
问题描述
我对撤消提交但不撤消更改本身的所有各种机制感到困惑..
在我的情况下,我的提交历史是这样的。
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 revert
将创建一个新的提交,恢复您在给定提交中对存储库所做的更改;它不会更改您当前的任何提交。这在您不想回滚历史但特定更改被破坏或需要以不同方式完成的项目中很有用。
听起来你想要的是git reset --soft HEAD^
. 这会将您的最后一次提交倒回为“添加的控制器类”提交,然后将最新提交中的更改留待提交。如果您不想暂存更改,请git reset --mixed HEAD^
改用.
请注意,这会倒回历史记录,因此如果您已经推送了更改,则需要通过+
在分支名称(例如 )之前放置一个加号 ( ) 来强制推送到服务器git push origin +master
。如果你正在和其他人一起做一个项目并且已经推动了,那么最好承认你犯了一个错误并git revert
改用它。
推荐阅读
- python - 为什么tensorflow中的这个RNN不学习?
- c - 将 malloc 用于 2D 数组时出现分段错误
- python - Selenium:从新打开的选项卡中抓取数据
- python - 使用带有 sqlite 的 sqlalchemy 使用 pandas to_sql 自动提交
- laravel - laravel S3 临时 URL 的安全性如何?
- c++ - 操作二维整数数组时堆栈溢出
- java - 无法写入 JSON:无法找到 id 为 0 的 com.demo.model.Control;
- outlook - 如何使用 Outlook 插件(Office 插件)将 Outlook 附件上传到 Web 服务?
- python - 在 Maya python 中,即使场景中不存在对象(字符串的一部分)也运行命令
- laravel - 关系检索用户电子邮件