2013-02-20 99 views
3

我正在为项目进行升级。在改变之前,我忘了创建一个新的分支。Git如何恢复提交但记住工作?

我COMMITED几次:

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

现在有一个紧急的缺陷需要固定的原件,所以我想修改它基于原来的一个。我想如果我恢复了这个改变,所有的工作都可能会失败。它是否还记得这个变化?

+0

创建您最初开始commiting和樱桃挑选你的提交有一点的一个分支,然后重订主。稍后再改善。 – pmr 2013-02-20 07:50:58

回答

1

以下是您可以做的事情。首先,一个新的分支指向你现在的工作:

git branch project_upgrade 

(如果您有任何未提交的修改,提交他们之前,你这样做。)

然后,同时仍然在你的master分支,继续和重置回更改前:

git reset --hard <SHA of original commit> 

这将重置您的master分支,但离开project_upgrade分支指向你原来的工作。 (因为这会重置所有文件,所以务必确保在分支之前没有未提交的更改,以便所有升级工作都将保存在您所创建的分支指向的提交中。)

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

git merge project_upgrade 
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继续处理您的新功能。然后检查你的功能是否准备就绪,你可以将它合并回主。

一般来说,您不希望在主版本上开发新功能,因此,尽管您可以立即将新功能合并回主版本,但我会建议您改为git checkout new_feature,然后继续您的工作直至完成,在你合并之前。