撤消连续提交多个Git,但保留所有更改

时间:2019-09-19 01:08:56

标签: git

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

这是图片中的情况:

A -> B -> C

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

A是master分支最后一次与remote正确同步的时间。

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

C是我所做的另一组更改。这些也致力于掌握。笨!我想保留这些更改,但也不要保留主更改。

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

我想看这个:

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

注意:我尚未将任何内容推送到远程位置,因此这一切都在我的本地存储库中。

1 个答案:

答案 0 :(得分:4)

您需要将HEAD指针移回A,这需要reset命令:

git reset A

这种形式的reset(默认为--mixed)将接受您“重置”的更改,并将其保留在工作目录中,而您的master分支将指向回到A

因此,在运行此命令后,git diff应该显示BC的内容。

此后,您可以将这些未分段的更改移至单独的分支:

git checkout -b feature-fix
git add .
git commit -m "changes"