2013-07-16 42 views
1

一個新的項目,與一隊新來的git的主人,我們開始直接在承諾。我們無意中發現了幾個壞主意被推到中央回購並被整個團隊拉下。放棄承諾已被推上游

實現我們的錯誤,我們就創建了一個特性分支關閉提交壞提交之前。我們的團隊現在正在開發功能分支。

現在,我們希望我們的分支包含從特性分支確切的代碼,而無需重新引入壞提交

我看到merge theirs選項已從混帳的後續版本中刪除。那麼最好的方法是什麼,放棄壞提交,讓我們的主人看起來完全像我們的功能分支

  • 合併?
  • 重置?
  • Rebase?

回答

6

,如果你想回去HEAD(以前的),你可以這樣做:

git reset --hard [email protected]{1} 

注:工作目錄更改將丟失。

您可以檢查這個問題,以及[Git命令]:http://git-scm.com/book/en/Git-Basics-Undoing-Things

一旦你已經搬回無不良提交您可以將您的特性分支合併到主分支

git checkout master_branch 

一個穩定的版本,您會開關與上述命令掌握然後

git pull origin master 

要拉主分支

git merge feature_branch 

這將更新具有功能分支更改的主控。現在兩個分支都是一樣的。

+0

嗨。我剛剛嘗試過,但沒有奏效。我們從master_branch開始,然後執行'reset --hard'。這將我們的主分支向後移動到原點/主點之後。 'git checkout master_branch'什麼都不做,因爲我們已經在master_branch上了。 'git pull origin master'然後解除'reset --hard'並重新引入壞提交。然後在合併之後,master_branch仍然包含錯誤的提交。有任何想法嗎? – KevSheedy

2

有(至少)兩種方式來得到你想要的,這可能會導致不同的歷史。你選擇哪一個取決於你對git數據結構和管道的熟悉程度。

在第一個中,您將與兩個父母進行合併提交:當前主控和功能分支的提示。此提交的內容與父分支的提示內容完全相同。最簡單的方法是運行合併(git merge --no-commit),然後在提交結果之前用索引中的內容(git reset FEATURE_BRANCH,我認爲)替換索引的內容。

在第二,你添加一個提交到撤消所有狡猾提交的特性分支手動合併之前的主人。 git revert能幫助您,或者您可以使用git checkout LAST_GOOD_COMMIT讓代碼回到它是在過去的良好狀態提交,並承諾,作爲主人的一角。最後,像往常一樣合併(或重新分配)。

我經常發現它有助於繪製出樹,我想要的結構的當前結構,然後制定出我需要爲了從一個到另一個要獲取的git的操作。請記住在副本上工作,並且reflog會在任何情況下存儲您的所有歷史記錄:)。