2012-01-31 59 views
3

恢復我們有2個分支:免費。大部分的代碼是寫在併合併到免費(而不是其他方式)。現在,在某種程度上出現了問題:只應在分支免費的代碼現在出現在主號中。這似乎像有人合併免費(或重新基於主免費),並推動這一點。這很愚蠢,但我們無法確定何時發生以及哪個提交(提交)引入了此錯誤。從不正確的rebase或合併

我很感激任何關於如何從這種情況中恢復的建議。

回答

0

最後我通過以下簡單的步驟恢復了主分支。

  1. 確定指向穩定分支的提交(在某人完成rebase之前)。我使用git checkout master @ {YYYY-MM-DD}來識別master分支的頭部,然後才能發生。原來這是在使用免費分支進行合併提交之前的最後一次提交(不出意外)。
  2. 分支出穩定的提交和櫻桃選擇所有主提交(不包括合併提交)。

也許最重要的部分是認識到rebase並非如此具有破壞性。它破壞了歷史,但不是樹木。所以,總有一個你可以恢復的提交。

1

可以使用-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選項。

+0

嗯,謝謝,但這並沒有真正幫助我的情況。可能是因爲代碼在分支之間非常相似。 – Dziamid 2012-02-01 12:45:03

+0

儘管如此,你可以在一個文件中找出一些不應該存在的行 - 在這種情況下,只需運行'git blame '並查找在左側引入該行的提交柱... – 2012-02-01 13:44:15