2012-09-21 58 views
40

步驟i執行後:將其還原爲合併被推

我有兩個分支BRANCH1和BRANCH2,

$git branch --Initial state 
$branch1 

$git checkout branch2 
$git pull origin branch1 --Step1 

我化解矛盾,做了

$git commit -m "Merge resolved" 

然後

$git checkout branch1 
$git merge branch2 
$git push origin branch1 

現在我reali sed說,雖然在step1,自動合併刪除了一些代碼,並推出了更改代碼,現在我想回到我的初始狀態,以恢復任何changes.looking一些即時幫助?

+0

你想要做什麼混帳恢復不是嗎? –

+1

它給出的消息爲:致命的:提交b4a758b36a5bde9311061fe7b56e4f47859de052是一個合併但沒有-m選項被給出。 @FrederickCheung – Bijendra

+0

查看關於-m選項的手冊。 http://www.kernel.org/pub/software/scm/git/docs/git-revert.html 不久,您可以使用-m 1或-m 2.這將選擇您想要的兩個父版本中的哪一個還原。 –

回答

56

您可以在official guide之後恢復合併,但這會讓Git錯誤地認爲合併的提交仍在目標分支上。

基本上,你必須:

git revert -m 1 (Commit id of the merge commit) 
+16

一個人應該小心''1。這意味着合併提交的「第一個」父項。但是,如果一個(假設)'偶然'合併到主分支,然後快速轉發主合併提交 - 人應該使用'-m 2'來恢復主合併。 –

+1

小心那個'1'。它通過部分地恢復合併來混亂我的存儲庫,而我想完全恢復合併。我最終恢復了回覆! – Metallica

15

嘗試使用git reflog <branch>找出您的分支在合併前的位置,並使用git reset --hard恢復舊版本。

Reflog會顯示分支的舊狀態,因此您可以將其返回到您喜歡的任何更改。

確保你在正確的分支,當你使用git重置

要更改遠程倉庫的歷史,你可以做git push -f,但不建議這樣做,因爲有人可以alredy已經下載了變化,由你推。

+0

我已經將代碼推送到遠程分支,這將如何從那裏恢復代碼.. – Bijendra

+1

如果您已經推送,你不想做本地歷史重寫,就像伊利亞所描述的那樣 –

+2

對不起,我錯過了那個東西......有時候你可以用git push -f來重寫遠程歷史。這取決於你的遠程倉庫配置和其他團隊成員(如果他們不會因爲強制推送而殺了你)。 –