首页 > 解决方案 > 连续撤消多个 Git 提交但保留所有更改

问题描述

我看到许多描述如何撤消提交但保留更改的问题/文章。如果我对错误的分支进行了多次热情的(阅读:不明智的)提交怎么办?

这是图片中的情况:

A -> B -> C

所有这些更改都在 master 分支上。

A是最后一次 master 分支与远程正确同步。

B是我所做的一系列更改。这些更改很好,我想保留它们,但是将它们提交到 master 分支是一个错误。

C是我所做的另一组更改。这些也都致力于掌握。愚蠢的!我想保留这些更改,但也不能放在master上。

如何让 master 分支恢复状态A,同时保留两者的所有更改BC,以便我可以将它们全部提交到新的功能修复分支?

我想看看这个:

A -> (all changes from B and C as unstaged changes)

注意:我还没有将任何东西推送到远程,所以这一切都安全地保存在我的本地仓库中。

标签: git

解决方案


您需要将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"

推荐阅读