不知怎的,我的git develop分支被合并到我的主分支中

时间:2012-09-24 19:25:39

标签: git git-flow

我正在使用git-flow,但这并不重要。我的主要分支是生产,我的开发分支是用于开发。

今天早上,我的主分公司(这是我的产品发布)几周没有被触及(自我上次发布以来)。现在,当我查看我的主分支时,它的所有提交都来自我的开发分支。

我没有在git log中看到合并,所以我很困惑如何让我的主分支回到它无聊的自我。

如何在不丢失开发工作的情况下找到此rouge合并到我的主分支并进行反转?

修改

这是否提供足够的信息来了解发生了什么?

以下是git reflog的输出:

0fe067c HEAD@{0}: pull: Fast-forward
300ba32 HEAD@{1}: checkout: moving from develop to master
06f1dd9 HEAD@{2}: pull: Fast-forward
0fe067c HEAD@{3}: commit: Add back prefix.
815ffe8 HEAD@{4}: pull: Fast-forward
f4c3e23 HEAD@{5}: pull: Fast-forward
93d1037 HEAD@{6}: pull: Fast-forward
e027c53 HEAD@{7}: commit: Don't commit changes to Prefix
96e37a9 HEAD@{8}: commit: Update URLs based on current server

2 个答案:

答案 0 :(得分:0)

好吧,如果合并已经快速转发,它将不会创建合并提交,这可能是发生的事情。

那么,从那里开始,我们去哪儿了?

好吧,如果你的遥控器仍然指向好的提交,你可以很容易地重置你的本地分支:

git reset --hard origin/masterremote/branch

否则,它有点复杂,但仍然是:您可以过滤您的reflog以仅记录主信息:

git reflog show master

如果记录的信息有意义,那么您可以重置:

git reset --hard master@{1}

请注意,--hard将放弃对工作树所做的所有本地更改,如果这是一个问题,请使用--keep

答案 1 :(得分:0)

您在发布时是否标记了生产分支?

你对上一版的sha1有什么想法吗?

我喜欢Simon Boudrias的答案,但它可以像使用git log找到您想要的提交并将分支重置为该提交git reset --hard <sha1>一样简单。

注意:您可能希望在没有--hard部分的情况下重置,以确保它能够将您带到您想要的位置而不会丢失信息。

git co production
git log # find the sha1
git reset <sha1> # to check if this is the point you want
git co production
git reset --hard <sha1>

由于您没有从“开发”中删除任何提交,因此您不会丢失提交(只要没有人直接在生产中开发)。