我正在使用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
答案 0 :(得分:0)
好吧,如果合并已经快速转发,它将不会创建合并提交,这可能是发生的事情。
那么,从那里开始,我们去哪儿了?
好吧,如果你的遥控器仍然指向好的提交,你可以很容易地重置你的本地分支:
git reset --hard origin/master
(remote/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>
由于您没有从“开发”中删除任何提交,因此您不会丢失提交(只要没有人直接在生产中开发)。