2010-07-12 104 views
2

我想恢復合併,因爲我沒有使用git merge -s recursive -X ours,而是使用git merge -s ours恢復git合併-s我們的

我讀過this blog post關於恢復合併,但它似乎不適用於我的情況。

所以,我有master分支,然後是topic分支。在某個時候,我合併mastertopic,然後合併topicmaster。當我將master合併到branch時,我在文件上發生了衝突,但我認爲它沒有做任何重要的事情,所以我想我說git跳過它,並使用我的版本。那時候我用git merge -s ours而不是git merge -s recursive -X ours,我今天發現它忽略了我的一個隊友所做的一切。現在

,我試圖扭轉這一合併:

git checkout master 
git revert -m 2 c475f0ac 

這的確是樹帶來我的合併(我的隊友的變化)忽略的變化。現在的問題是,我的變化不再在樹上。我嘗試恢復回覆,但沒有成功。

有關如何恢復這種合併的任何建議?

+0

是否有任何可能'重置 - 難'碩士和主題合併之前他們的狀態? – VonC 2010-07-12 11:08:51

+0

不完全。合併已被推動。我想我能做的就是用'--no-commit'恢復合併,以便我可以修復這些更改,然後提交恢復。 – 2010-07-12 11:21:53

+0

更新。這正是我所做的。使用--no-commit恢復,修復更改並提交。當時它運行良好。 – 2010-08-11 09:24:27

回答

1

revert子使一個新的提交撤消指定的提交,這通常是複雜的復歸合併提交

您可以將樹設定任何具體承諾的狀態,搜索合併提交(是c475f0ac? ),然後設置樹的那個狀態父提交(注意:在命令的結束點,這一點很重要):

git checkout c475f0ac^ . 

如果您想將狀態設置爲不同的父的承諾,你應該使用

git checkout c475f0ac^2 . 

依此類推。 你會發現有用的gitk命令來分析提交之前進行(選擇承諾,你想要的):

gitk c475f0ac 

狀態設置爲先前提交之後,你可以提交

git commit --message 'restored tree to state previous to merge commit c475f0ac' 

然後按

git push