2012-09-21 47 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来重写远程历史。这取决于你的远程仓库配置和其他团队成员(如果他们不会因为强制推送而杀了你)。 –