2012-11-09 47 views
0

我們有一個有點亂,其中一個古老分支曾後續工作做得 這是所有合併到一個開發分支,但之間 所以在開發完成的其它工作:還原一個複雜的合併

我們開始開發
然後分支到5.6.9
工作繼續進行開發,同時也對5.6.9
在5.6.9所有工作被合併下到開發
分支產生掉在開發中的最新(在這個階段〜1800提前5.6.9)然後合併到5.6.9 - 這就是我們想要恢復的

我們沒有線性歷史記錄,我們可以恢復到給定的提交,因爲5.6.9在提交開發之間完成的工作,並且無法找到任何方式來找到合併的提交哈希作爲日誌舊的分支現在包含所有的開發(即git日誌 - 整合顯示所有功能分支合併到開發,而不是合併到我們所做的5.6.9)

有沒有記錄git保持所有合併?並有任何方式告訴它撤消合併(已被推送)?

+0

是的,git知道所有合併...他們承諾與多個父母。你可以在'git log --merges'的分支上看到合併。可以使用'git revert'來恢復特定的提交。但是你可能想要閱讀它。這裏有一個關於撤消合併的[好帖子](http://git-scm.com/2010/03/02/undoing-merges.html)。 – jszakmeister

回答

0

你可以做一個

git log --grep Merge 

爲了讓您的commitid。

然後:

git rebase --onto <commit-id>^ <commit-id> HEAD 

這應該處理它。

+0

我試過了,git log --merges但是它已經全部合併到了dev中,而不是單獨合併到5.6.9中,它將撤消它所帶來的所有1800次提交。確定我錯過了某些內容,但努力尋找什麼 – steve

+0

沒有解決這個問題 - 最後我們不得不重新設置 - HEAD〜2回到合併的開發者機器上 - 但是認爲這是因爲他們使用了一個助手,是的,不再知道重寫歷史的危險!) – steve

0

對於合併提交,你可以只用grep顯示它在git的日誌由sjakubowski即作爲建議

git log --grep Merge

然後,一旦你找到了合併提交你可以恢復它

git revert -m 1 <merge_commit_id>

這應該工作。