首页 > 解决方案 > git reset --hard 不丢失历史

问题描述

我有以下情况:

A-B-C-D (master)

我想撤消 D 中的所有本地更改并从 D 转到 B 中的所有内容,但我不想只转到 B。我希望将 B 的阶段附加到当前历史记录中,以便我以结束:

A-B-C-D-B' (master)

所以就像从 D 恢复到 B 但将这个 Reverting 保留在历史中。

当我进行重置时--hard,我会丢失从 B 到 D 的历史记录,最终得到:

A-B (master)

我只想将历史记录中的一个点添加到历史记录中并开始处理这个最高点,而无需创建新的分支存储等。就像获取 B 中的所有内容并提交它(带有提交消息:“从 B 恢复”)在上面。

这有可能吗?

标签: git

解决方案


是的,git revert这正是您正在寻找的。它创建一个新的提交,恢复给定提交的更改。

在您的情况下,以下命令都是等效的:

git revert HEAD~2..
git revert HEAD~1 HEAD
git revert <hash_of_C>..<hash_of_D>
git revert <hash_of_B>..

有关更多信息,请参阅文档


推荐阅读