在提交到当前头之前合并Git状态

时间:2014-09-12 13:40:31

标签: eclipse git merge egit

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

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

我需要在错误合并之前将状态合并到我当前的主头。

我怎么能做到这一点?

我已经尝试了@Drecker的answer

git revert -m 2 <SHA_hash_of_merge_commit>

我现在回复了正确的文件内容,但是我从第二个人那里丢失了正确的文件内容。我承诺了,但不要推它。我从那里创建了一个新的分支restore。现在,第二人称内容在远程master分支中是正确的,并且我的内容在本地restore分支中是正确的。

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

2 个答案:

答案 0 :(得分:0)

更新:您可以阅读此帖:Undo a Git merge that hasn't been pushed yet

To&#34;撤消&#34;已经提交(和推送)的合并,您可以使用

git revert -m <parent_number> <SHA_hash_of_merge_commit>

parent_number是该合并的父母的索引编号 - 这是必需的,因为git不知道您要拒绝哪个分支(从1开始索引)。这样,将创建一个新的提交,删除由被拒绝的分支

创建的所有更改

其他(未记录)选项是使用

git rebase -i <SHA_of_commit_to_which_you_want_to_change_histrory>

通过这种方式,您将以交互方式选择当前HEAD中您想要的提交,而不是

警告:这样你实际上改变了git历史记录!您可能会丢失一些更改(在任何其他分支中都没有)并且在您的同事提取更改时会导致更多问题

答案 1 :(得分:0)

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

你可以使用git reflog + git reset来实现它,这样(我假设分支是master):

git reflog master

将返回本地主参考的历史记录,输出类似于此:

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

注意合并提交,用&#34;提交(合并)&#34;注明,也许那些是您尝试的合并提交&#34;撤消&#34;,继续你可以使用git reset命令,这样:

git stash # save all local changes on index and WC just in case
git reset --hard master@{4}

注意我在这里使用master @ {4},因为找到了合并提交为master @ {3}

执行此操作后,您需要再次执行合并,您可以多次执行此操作,以便重新执行合并操作