2013-02-20 94 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,然後繼續您的工作直至完成,在你合併之前。