git - 连续撤消多个 Git 提交但保留所有更改
问题描述
我看到许多描述如何撤消提交但保留更改的问题/文章。如果我对错误的分支进行了多次热情的(阅读:不明智的)提交怎么办?
这是图片中的情况:
A -> B -> C
所有这些更改都在 master 分支上。
A
是最后一次 master 分支与远程正确同步。
B
是我所做的一系列更改。这些更改很好,我想保留它们,但是将它们提交到 master 分支是一个错误。
C
是我所做的另一组更改。这些也都致力于掌握。愚蠢的!我想保留这些更改,但也不能放在master上。
如何让 master 分支恢复状态A
,同时保留两者的所有更改B
和C
,以便我可以将它们全部提交到新的功能修复分支?
我想看看这个:
A -> (all changes from B and C as unstaged changes)
注意:我还没有将任何东西推送到远程,所以这一切都安全地保存在我的本地仓库中。
解决方案
您需要将HEAD
指针移回A
,这需要reset
命令:
git reset A
这种形式的reset
( --mixed
,默认值) 将接受您“重新设置”的更改并将它们保留在您的工作目录中,而您的master
分支将指向A
.
因此,在您运行此命令后, agit diff
应该会显示 和 的B
内容C
。
在此之后,您可以将这些未暂存的更改移至单独的分支:
git checkout -b feature-fix
git add .
git commit -m "changes"
推荐阅读
- r - 如何使用不均匀列表创建数据框
- xamarin - MasterDetailPage:接受页面以外的内容
- python - 在 Keras 中建立功能模型
- python - 从固定日期和预期的未来事件计算结果
- ruby - 如何屏蔽 URL 导轨
- node.js - save() 忽略“updateAt”字段更改
- matplotlib - 在 matplotlib 中部分斜体的情节标题
- artifactory - 具有许多目录的 Artifactory 存储库浏览器
- swagger - 是否可以将 spring-auto-restdocs 与 Swagger/SpringFox 一起使用?
- powershell - PowerShell 遍历对象数组并找到一个