【问题标题】:How to bring my branches to their original state they were in before merging?如何将我的分支恢复到合并前的原始状态?
【发布时间】:2022-12-17 16:36:45
【问题描述】:

我是 git 的新手,我弄得一团糟。

我有两个分支——发布和开发分支。

我的发布分支落后开发分支 100 次提交,提前 10 次提交。

我希望将发布分支中的 10 次提交提交到开发分支,因此我创建了一个从发布分支到开发分支的拉取请求,但存在一些合并冲突,因此我使用了以下我发现的命令来解决合并冲突:

git checkout release
git pull --rebase origin develop
If there are some conflicts, go to these files to modify them.
git add #your_changes_files
git pull
git push origin release

不幸的是,在我合并拉取请求后,我发现我的发布分支与我的开发分支同步,即开发分支后面的 100 次提交也成为发布分支的一部分。我希望我的发布分支回到合并之前的状态(100 次提交和 10 次提交)。

请帮我解决这个问题。

提前致谢。

【问题讨论】:

  • 仅供参考:您没有进行合并;您将 release 分支重新定位在 develop 之上:git pull --rebase ...
  • @j6t 之后我对拉取请求进行了合并,我理解其中的困惑,我已经编辑了问题
  • 之前或之后的状态有问题吗合并?最终合并的内容是什么?
  • @j6t 合并后的状态有问题,我想回到命令执行前的状态。问题是我的发布分支现在有在开发分支上执行的提交(前面的 100 次提交)。我不希望开发分支的 100 次提交必须成为我的发布分支的一部分。我只是希望发布分支的 10 个额外提交也应该是开发分支的一部分。我也没有预料到发布分支的变化。

标签: git github bitbucket


【解决方案1】:

要返回到以前的状态,您可以执行以下操作:

git checkout release
git reset --hard release@{2.hours.ago}

这使分支处于两个小时前的状态。选择一个合理的时间跨度,该时间跨度介于您在分支上执行最后一次提交和执行 pull --rebase 之间。

您还可以调查 reflog 并选择 git pull --rebase 完成之前的提交:

git reflog show release
git reset --hard release@{2}    # for example

验证您是否处于正确的提交状态:

git log --pretty=fuller   # observe the commit date; should be before you did the pull --rebase

然后推出修正的分支。

【讨论】:

    【解决方案2】:

    从一开始你就必须在发布分支上重新设置你的开发分支

    git checkout develop
    git rebase release
    

    这将使您的开发分支提前 100 次提交,发布分支后 0 次提交。

    所以现在你必须

    git reset --hard HEAD~1
    

    在两个分支上都比执行上面提到的命令

    【讨论】:

      【解决方案3】:

      要将您的发布分支恢复到以前的状态,请使用以下命令

      git revert -m 2 <merge_id>
      git push origin <release-branch>
      

      【讨论】:

        【解决方案4】:
        git reset --hard origin/release
        

        【讨论】:

          猜你喜欢
          • 2022-09-22
          • 2015-11-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多