【问题标题】:Somehow my git develop branch got merged into my master branch不知何故,我的 git 开发分支被合并到我的主分支中
【发布时间】:2012-09-24 19:25:38
【问题描述】:

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

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

我在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

【问题讨论】:

  • 你是否在发布到生产之前标记你的主人?
  • 如果我必须恢复到特定的提交,我可以这样做,但我宁愿弄清楚这里发生了什么,这样就不会再发生了。
  • 您可以搜索git reflog 以了解更多可能发生的事情
  • 也许它是从开发到主的变基(这就是你看不到合并提交的原因)。

标签: git git-flow


【解决方案1】:

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

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

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

git reset --hard origin/master(其中remote/branch)

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

git reflog show master

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

git reset --hard master@{1}

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

【讨论】:

    【解决方案2】:

    你发布时是否标记了你的生产分支?

    您对上一个版本的 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>
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-29
      • 2016-01-01
      • 2017-09-17
      • 2021-06-06
      • 1970-01-01
      相关资源
      最近更新 更多