我看到许多问题/文章,描述了如何撤消 a 提交但保留更改。如果我对错误的分支进行了多次热心(阅读:不明智的建议)怎么办?
这是图片中的情况:
A -> B -> C
所有这些更改都在master分支上。
A
是master分支最后一次与remote正确同步的时间。
B
是我所做的一组更改。所做的更改很好,我想保留它们,但是将它们提交到master分支是一个错误。
C
是我所做的另一组更改。这些也致力于掌握。笨!我想保留这些更改,但也不要保留主更改。
如何保持master分支回到状态A
,同时保留B
和C
的所有更改,以便将它们全部提交到新的功能修复分支?
我想看这个:
A -> (all changes from B and C as unstaged changes)
注意:我尚未将任何内容推送到远程位置,因此这一切都在我的本地存储库中。
答案 0 :(得分:4)
您需要将HEAD
指针移回A
,这需要reset
命令:
git reset A
这种形式的reset
(默认为--mixed
)将接受您“重置”的更改,并将其保留在工作目录中,而您的master
分支将指向回到A
。
因此,在运行此命令后,git diff
应该显示B
和C
的内容。
此后,您可以将这些未分段的更改移至单独的分支:
git checkout -b feature-fix
git add .
git commit -m "changes"