【问题标题】:How to PR and merge again after reverting PR using Github Revert Button使用 Github Revert Button 恢复 PR 后如何再次 PR 和合并
【发布时间】:2015-03-07 06:38:57
【问题描述】:

基本上我使用Github revert button功能分支 的先前PR 还原为master,然后我决定合并我之前还原的相同功能分支 ,但我无法这样做。步骤如下:

  1. PR 将 功能分支 合并到 master
  2. 从 (master) 恢复 PR 合并
  3. 尝试创建新 PR 以再次将功能分支合并到 master
  4. 收到此消息:

没有什么可比较的。

master 是最新的,包含来自 feature-branch 的所有提交。尝试切换基数进行比较。

关于如何将 功能分支 再次合并到 master

的任何建议

【问题讨论】:

    标签: git github merge revert


    【解决方案1】:

    只需还原还原。因此,通过单击还原按钮,您将创建一个新的 PR(您的第 2 步)。合并后,您将可以选择还原它,这将创建一个新分支,其中包含您的所有更改。然后您可以拉取它,对其进行更改(如果需要)并创建一个新 PR。您将丢失 Github 上的所有提交消息,但所有文件更改仍然存在。很高兴参考您的原始分支并在新 PR 中恢复。

    任何可以避免复杂的变基或强制推送到 master 的方法。

    【讨论】:

    • A) rebase 是一个有用的工具,不要避免它,因为它很复杂。 B)还原还原有警告(请参阅我的回复)
    • 如果你想清理丑陋的分支名称 revert-123-revert-123.. 或类似名称,你可以用 git branch -m <new_name> 重命名分支,然后推送提交-git push origin -u <new_name>,然后删除那个丑陋的分支名称 git push origin --delete revert-123-revert-123 .更多信息linuxize.com/post/how-to-rename-local-and-remote-git-branch
    • 如果原始 PR 包含 A+B 并且现在您只想合并 A,则不起作用。
    • 由于 Github 还原按钮并不总是有效,替代方法是手动还原 Github 之前创建的还原提交。然后只需将其推送到新分支并创建 PR。当然,在开始之前请确保您的 master 是最新的。 (请注意,github 创建了一个单一的恢复提交,其中包含来自被恢复的原始分支的所有提交。因此很容易手动恢复它)
    【解决方案2】:

    我正在写这个答案,因为我遇到了这个问题,我发现这里的答案更多的是理论而不是实际。我浏览了更多内容,并找到了解决此问题的方法。您可以在文章here中找到更详细的答案。

    要解决这个问题,你必须创建一个新的分支来跟踪 master 并revert the revert commit。然后签出功能分支并合并新分支。现在您可以解决冲突(如果有)、提交并创建新 PR。

    命令如下:

    # do the needed changes in the feature branch
    $ git commit -m "fixed issues in feature-branch'
    
    # create new branch tracking master branch
    $ git checkout -b revert-the-revert-branch -t master
    
    # revert the reversion commit
    # find it from your git log
    # in linux try: 'git log | grep revert -A 5 -B 5'
    $ git revert <revert-commit-hash>
    
    # checkout the original feature branch
    $ git checkout feature-branch
    
    # merge the revert branch
    $ git merge revert-the-revert-branch
    
    # handle merge conflicts and commit and PR
    

    【讨论】:

    • @Aboodred1 请将此标记为答案,因为大多数人都认为这是有用且实用的答案。
    • 嗨 Shanika,你的策略意味着我们仍然应该拥有功能分支。但是,如果功能分支在合并时被删除(现在几乎所有 VCS 平台都会这样做)怎么办?
    • 如果 commit 和 revert 包含 A+B 并且你想应用 A,则不起作用。
    【解决方案3】:

    我知道这是旧的,但如果有人需要一个好的答案在这里:

    合并 PR 并删除分支并稍后恢复此合并后,您可以创建一个新分支,然后恢复恢复。将其推送到远程仓库并创建一个新 PR。

    这将创建一个新 PR,其中包含一个名为 'revert "revert #123 blabla" 的提交,所有更改都在 diff 上。

    https://www.tildedave.com/2012/11/24/reverting-a-github-pull-request.html

    【讨论】:

      【解决方案4】:

      什么

      您应该拉取最新的 master,将您的分支重新设置在 master 上,然后您应该能够发出另一个拉取请求。


      为什么

      您无法自动合并回来的原因是分支的基础与主分支的 HEAD 不同步。

      还原 Revert 可能会变得混乱,有时缺乏透明度。

      此外,还原一个 revert 将阻止具有此代码的其他分支正确合并。

      假设您在 master 上有功能 x 并合并到分支 y 中。然后你决定 master 不应该合并功能 x,因为它取决于分支 y。所以,你恢复主人。当您尝试合并分支 x 时,git-merge 命令会看到原始合并,并高兴地宣布一切都很好并且分支已经合并,忽略这些提交功能 x,即使您希望它们与分支 y 合并。

      【讨论】:

      • 除了基本情况外,这个答案在所有情况下都是不够的,因为您必须找到旧分支并将所有内容复制到文本编辑器中才能创建新分支。 Anthony 的解决方案更加透明,唯一的混乱在于自动生成的 github 名称,您可以自己修改。
      • 为什么必须将任何内容复制到文本编辑器中?拉主,切换到您的分支(其名称在 PR 中,因此您不必“找到”任何东西),拉分支,git rebase master,强制推送分支。完成。
      • 没用:git checkout master; git pull; git checkout feature; git pull; git checkout -b feature_rebase; git rebase master; git push(加长版);尝试在远程 git repo 上创建 PR - 零文件
      • 如果 nTry 以交互方式运行 rebase 以了解 rebase 中的提交。
      • @bshirley 我认为这种方法依赖于重写来自恢复分支的提交。因此,您需要在 master 上进行新的提交,因此当您在其之上 rebase reverted-branch 时,它的提交将被重写。 (不是 100% 确定,没试过)
      【解决方案5】:

      这就是我所做的。

      1. 检查您的功能分支

      2. 使用您的基础分支进行变基: 这将使您的功能分支进入基础分支的状态,因为您的功能分支提交已经是基础分支的一部分。您的功能分支提交将在您的还原 PR 提交下方对齐。

      3. 然后恢复恢复你的 PR 的提交。这将使您的功能分支恢复到其原始状态,但现在有一个新的提交。

      4. 推送到功能分支,然后提出 PR。

      为什么会这样? 通过重新定位,您可以使您的功能分支与基础同步,即使其与基础相同的提交 - 需要在基础之前移动并获得将您的更改还原到您的功能分支的提交

      通过还原您撤消删除更改的更改,现在您的更改可以成为基于分支的新提交 AHEAD 的一部分。

      【讨论】:

        【解决方案6】:
        1. 进入 Revert PR 并点击“Revert”(但不要合并)
        2. git fetch
        3. git checkout &lt;name of revert's revert&gt;

        您的所有更改都会在那里,当您创建 PR 时,更改会显示出来。

        需要明确 - 点击 Revert PR 上的“Revert”会给你一个类似 revert-202-revert-201-originalbranchname 的名字。这是您要编辑的分支!

        【讨论】:

          【解决方案7】:
          1. 切换到master分支,打印出提交日志git log。在这里搜索为 PR 所做的提交并复制提交哈希码。
          2. 现在运行git cherry-pick YOUR_HASH_CODE。这将使您的特定承诺成为头条新闻。
          3. 现在创建一个新分支并切换到这个新创建的分支并将其推送到 git。
          4. 现在从这个新创建的分支创建一个 PR 到 master。

          【讨论】:

            猜你喜欢
            • 2022-01-05
            • 1970-01-01
            • 2022-08-11
            • 2011-07-21
            • 2022-01-27
            • 2020-10-17
            • 2013-09-13
            • 2022-11-11
            • 2020-06-27
            相关资源
            最近更新 更多