2014-09-12 125 views
0

如何在错误提交到Git中的当前头之前合并状态?在提交到当前头之前合并Git状态

错误地被其他人合并重置了我在服务器上的更改,在获取并合并远程主分支之后,我的更改已在本地消失。与此同时,更正确的提交被推送到远程服务器并保持在主分支的当前头部。

我需要将发生错误合并之前的状态合并到我当前的主控头中。

我该如何存档?

我试过@Drecker的answer

git revert -m 2 <SHA_hash_of_merge_commit> 

和我现在有我正确的文件内容回来,但我从第二人失去正确的文件内容。我承诺它,但不要推它。我从中创建了一个新分支restore。现在第二人称内容在远程master分支中正确,我的内容在本地restore分支中正确。

我该如何重新合并两个分支,以便我从两个分支都有正确的内容?

回答

0

UPDATE:你可以阅读这篇文章:Undo a Git merge that hasn't been pushed yet

“撤销”已提交(推)的合并,你可以使用

git revert -m <parent_number> <SHA_hash_of_merge_commit> 

parent_number被索引的家长人数合并 - 它是必需的,因为git不知道你想拒绝哪个分支(从1开始索引)。这样一个新的提交将被创建删除那些被拒绝的分支创建的所有变化

其他(unrecomanded)选择是使用

git rebase -i <SHA_of_commit_to_which_you_want_to_change_histrory> 

这样您将交互式选择你当前HEAD想要的承诺和其中不是

警告:这样你实际上改变了git的历史!您可能会失去一些更改(不在任何其他分支),并在您的同事将更改问题时引发更多问题

+0

如何找到'parent_number'? – 2014-09-12 15:33:11

+0

@ BuZZ-dEE我不知道如何/如果你能找到它,但作为我的经验去'1'是为“主”分支(你想要这个)和'2'(我猜)是分支你合并为“主”分支 - 所以只需将'1'作为'parent_number' – Drecker 2014-09-12 15:46:14

+0

我还没有完成合并,它是第二个人。所以,我需要知道我做了什么。 – 2014-09-12 17:37:21

0

您需要恢复第一次合并之前的状态。

您可以通过使用Git引用日志+ git的复位,这样acchive它(我假设的分支是master):

git reflog master 

会回到你的本地主裁判的历史,是一个输出类似于这样的:

1904ece [email protected]{0}: commit: fixed styles 
ba185a3 [email protected]{1}: commit: fade transition for angular pages| 
b06d0a5 [email protected]{2}: commit: fixed detail view 
792af52 [email protected]{3}: commit (merge): Merge branch 'origin/master' into master 
128dd58 [email protected]{4}: commit: fixed save of searchs 
... 

注意合并提交,注意到“提交(合并)”,也许那些是合并提交您要“撤销”,继续,你可以使用git reset命令,此方式:

git stash # save all local changes on index and WC just in case 
git reset --hard [email protected]{4} 

注意我用的主@ {4}在这里,因为合并提交发现作为主@ {3}

这样做了以后,你将需要拉,并再次做合并,你可以做这需要多次重新合并操作

+0

如果我这样做,我得到错误的内容回来,如果我合并主从远程进入本地重置状态。 – 2014-09-12 15:05:22

+0

我会在答案中添加更多细节,我解释了如何重做合并,但是在合并远程原点/主模块之前,您需要知道如何“合并状态”(您指“状态”是什么意思?) – dseminara 2014-09-12 15:08:20

+0

I意思是我承诺/推送的文件的内容,并且意外被第二个人的合并提交/推送覆盖。这是我的文件的正确状态。 – 2014-09-12 15:12:19