恢復我們有2個分支:主和免費。大部分的代碼是寫在主併合併到免費(而不是其他方式)。現在,在某種程度上出現了問題:只應在分支免費的代碼現在出現在主號中。這似乎像有人合併免費到主(或重新基於主免費),並推動這一點。這很愚蠢,但我們無法確定何時發生以及哪個提交(提交)引入了此錯誤。從不正確的rebase或合併
我很感激任何關於如何從這種情況中恢復的建議。
恢復我們有2個分支:主和免費。大部分的代碼是寫在主併合併到免費(而不是其他方式)。現在,在某種程度上出現了問題:只應在分支免費的代碼現在出現在主號中。這似乎像有人合併免費到主(或重新基於主免費),並推動這一點。這很愚蠢,但我們無法確定何時發生以及哪個提交(提交)引入了此錯誤。從不正確的rebase或合併
我很感激任何關於如何從這種情況中恢復的建議。
最後我通過以下簡單的步驟恢復了主分支。
也許最重要的部分是認識到rebase並非如此具有破壞性。它破壞了歷史,但不是樹木。所以,總有一個你可以恢復的提交。
可以使用-S<search-string>
選項git log
找到單位犯添加或刪除從file.¹特定字符串所以,如果你知道ToasterFactory
類是僅在free
分公司介紹,你可以做以下看看哪款合併提交帶來了爲master
:
git log -SToasterFactory --merges master
...或者,如果它可能已經由重訂或摘櫻桃介紹,你可以做:
git log -SToasterFactory master
如果是合併提交引入了master
的所有更改,則可以嘗試恢復合併提交,例如,搭配:
git revert <SHA1-OF-MERGE-COMMIT>
的一個音符有關的謹慎是,如果你以後想重新emerge,你可能需要revert the revert first。
¹嚴格來說,這個選項只回報承諾,其中該字符串的出現次數在一個特定的文件數量。使用git 1.7.4或更高版本,您可以使用-G
選項。
嗯,謝謝,但這並沒有真正幫助我的情況。可能是因爲代碼在分支之間非常相似。 – Dziamid 2012-02-01 12:45:03
儘管如此,你可以在一個文件中找出一些不應該存在的行 - 在這種情況下,只需運行'git blame'並查找在左側引入該行的提交柱... –
2012-02-01 13:44:15