4

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

今天早上,我的主分支(这是我的生产版本)已经好几个星期没有被动过(自我上次发布以来)。现在,当我查看我的 master 分支时,它包含了来自我的开发分支的所有提交。

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

我怎样才能找到这个胭脂合并到我的主分支并在不丢失我的开发工作的情况下将其反转?

编辑:

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

这是输出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
4

2 回答 2

0

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

那么,从那里,我们要去哪里?

好吧,如果你有一个远程仍然指向好的提交,你可以很容易地重置你的本地分支:

git reset --hard origin/master(在哪里remote/branch

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

git reflog show master

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

git reset --hard master@{1}

请注意,这--hard将丢弃对工作树所做的所有本地更改,如果这很麻烦,请使用--keep.

于 2012-09-26T01:49:44.087 回答
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>

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

于 2012-11-09T21:54:02.133 回答