2011-12-20 62 views
1

我使用git來管理我的項目,但我沒有太多的這種程序的經驗,所以我經常使用它們不當(例如:我承諾很多(不相關的)只更改一次提交)。我試圖更好地使用它們。創建分支後還原許多提交

順便說一句我注意到,我開始開發我的項目,將更好地適合分支的擴展。所以從git gui我創建了一個新的分支,這是一個主副本。 現在我想把主人恢復到最後一次提交,我認爲這與項目無關。我知道這個提交是什麼,但我不知道如何將HEAD的所有提交恢復到這個提交,並且我不知道這是否會影響分支(失去所有新作品將是一個真正的痛苦) ..)

那麼,我該怎麼辦?

ps:通常我使用git gui,但我在使用git bash時沒有問題。我使用win7,並且我正在管理一個在Eclipse中的java android項目。

回答

2

如果您創建了分支,請將其更改回主設備並將其重置爲所需的提交git reset --hard commitid。現在'master'被設置爲這個提交,並且分支仍然指向之前爲其配置的提交。

分支名稱是特定提交的引用或備用名稱。重置允許您更改參考指向的提交併強制工作樹匹配(使用--hard)

+0

正是我需要的!謝謝 – 2011-12-20 16:02:24

+0

順便說一句,當我合併主與分支,因爲在恢復我修改代碼,並希望在分支也這種修改,我不會失去所有從的進步到創建分支時的 , 對? – 2011-12-20 17:02:39

2

更改到master分支不會影響您的新分支的歷史記錄。

如果你想改變master的頭是在一個特定的提交,使用reset

git checkout master 
git reset --hard <commit id> 

如果你的事件順序爲:

  1. 提交大的變化。
  2. 創建新分支。

而你只是想獲得master之前以前回到提交,使用reset

git checkout master 
git reset --hard HEAD^ 

如果你的事件順序爲:

  1. 提交大的變化。
  2. 提交其他更改(應保留在master)。
  3. 創建新分支。

而你只是想刪除big changemaster承諾,同時保留其他所有提交完整,使用revert

git checkout master 
git revert <commit id> 

如果你的事件順序爲:

  1. 提交大的變化。
  2. 提交其他更改(也應從master中刪除)。
  3. 創建新分支。

而且要刪除所有近期通過提交併包括big changemaster,使用reset

git checkout master 
git reset --hard <big change commit id>^ 
+0

精彩的解釋,我相信你會得到很多+ 1。很難決定接受的答案,但這次我選擇了另一個,因爲它更簡潔 – 2011-12-20 16:06:41