当它已经恢复时不显示任何提交?

I'l*_*ack 3 git github

我已在分支上合并了 PR develop,但暂存时出现问题,因此我已使用以下命令恢复:

git revert -m1 <commit> 然后在分支git push上develop

当我在 Github 上创建 PR 以将功能分支合并到 时develop,即使我已经恢复了开发分支上的合并提交,它也没有在 PR 上显示任何提交/代码。

这是什么问题以及如何解决?

Pra*_*nna 9

这里需要理解两个概念。

  1. 合并时,git 会比较两个分支历史记录中的提交哈希值,以确定要合并的提交。
  2. git revert通过创建新的提交来反转先前的提交。请参阅Git 恢复文档。先前的提交不会从历史记录中删除。

以下是您的开发分支的当前状态。

c1 -- c2 -- merge commit -- revert commit
  \         / 
    c3 -- c4 

c3, c4 - commits that contain the feature branch changes 
Run Code Online (Sandbox Code Playgroud)

如果你现在尝试合并功能分支,由于 c4 提交已经在开发历史中,git 将不会采取任何操作。

可以通过以下方式解决。此链接中有关于此场景的详细讨论。

创建补丁并重新应用更改

  1. 在您的功能分支中,运行git log以确定自哪个提交以来需要将更改合并到开发分支。(在我们的示例中,它是 c3)。
  2. 创建补丁。跑步, git format-patch <commit> <folder where patch file will be saved>
  3. 现在将开发分支合并到您的功能分支。git merge origin/develop。这也将恢复您在功能分支中的更改。
  4. 重新应用补丁,git apply --index <patch file>。
  5. 请记住进行最初不正确的其他更改。承诺并推动。

恢复恢复提交

正如@Lasse 提到的,您可以恢复恢复提交。最好在功能分支中进行这些更改,然后提出 PR 来开发分支。

  1. 合并开发到功能分支
  2. git revert <revert commit>
  3. 进行必要的更正,提交并推动更改。

重新调整你的功能分支

这是最不可取的选项,因为它重写了功能分支历史记录。您可以运行git rebase -i <since commit>并更改要合并的第一个提交的消息。这将创建新的当前和连续提交哈希,并允许您将其合并以进行开发。但有两个问题。

  1. 您的所有更改都会在 PR 上出现合并冲突。最好将开发合并到本地的功能分支,解决冲突并推送。
  2. 您需要强制推送,因为您将重写远程功能分支的历史记录