Git如何恢复提交但记住工作?

时间:2013-02-20 07:40:21

标签: git

我正在为项目升级。在进行更改之前,我忘了创建一个新的分支。

我已多次提交:

原创 - >提交 - >提交 - >提交 - >现在

现在需要为原始副本修复一个紧急错误,所以我想根据原始副本修改它。我在想如果我恢复变革,所有的工作都可能会丢失。它还记得变化吗?

2 个答案:

答案 0 :(得分:4)

我会执行以下操作,假设master现在指向now,并且您希望将master指向original

// Make sure you are on master, thus looking at 'now'
git checkout master

// Make a new branch pointing at 'now'
git branch new_feature

// Reset 'master' back 4 commits to 'original'.
git reset --hard HEAD~4

这会让主人回到你想​​要的地方,你可以用你的修复程序进行新的提交。然后,您可以通过git checkout new_feature继续处理新功能。然后检查您的功能是否准备就绪,您可以将其合并回主人。

一般情况下,您不希望因为这个原因在master上开发新功能,所以虽然您可以立即将新功能合并到master中,但我建议您git checkout new_feature并继续工作直到在你合并之前就完成了。

答案 1 :(得分:2)

这是你能做的。首先,建立一个指向当前工作的新分支:

git branch project_upgrade

(如果您有任何未提交的更改,请在之前提交。)

然后,当您仍在master分支上时,请继续并重置为您的更改之前:

git reset --hard <SHA of original commit>

这将重置您的master分支,但让project_upgrade分支指向您的原始作品。 (因为这会重置所有文件,所以确保在分支之前没有未提交的更改非常重要,这样您的所有升级工作都将保存在您所创建的分支所指向的提交中。)

然后修复你的错误。之后,您可以将升级工作合并到:

git merge project_upgrade