Git 在已还原时不显示任何提交?

Git 在已还原时不显示任何提交?,git,github,Git,Github,我已在develope分支上合并了一个PR,但在登台时出现问题,因此我已使用以下命令还原: git还原-m1 然后在development分支上git推送 当我在Github上创建PR以将功能分支合并到develope,它不会在PR上显示任何提交/代码,即使我已恢复了在develope分支上的合并提交 c1 -- c2 -- merge commit -- revert commit \ / c3 -- c4 c3, c4 - commits that cont

我已在
develope
分支上合并了一个PR,但在登台时出现问题,因此我已使用以下命令还原:

git还原-m1
然后在
development
分支上
git推送

当我在Github上创建PR以将功能分支合并到
develope
,它不会在PR上显示任何提交/代码,即使我已恢复了在develope分支上的合并提交

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

c3, c4 - commits that contain the feature branch changes 

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

这里需要理解两个概念

  • 合并时,git比较两个分支的历史记录中的提交哈希,以确定要合并的提交
  • git revert
    通过创建新的提交来反转以前的提交。参考上一次提交不会从历史记录中删除
  • 下面是您的开发分支的当前状态

    c1 -- c2 -- merge commit -- revert commit
      \         / 
        c3 -- c4 
    
    c3, c4 - commits that contain the feature branch changes 
    
    如果您现在尝试合并特性分支,因为c4提交已经在开发历史中,git不会采取任何行动

    这可以通过以下方式解决。本文详细讨论了该场景

    创建修补程序并重新应用更改
  • 在您的功能分支中,运行
    git log
    ,以确定从哪个提交开始需要合并更改以开发分支。(在我们的示例中,它是c3)
  • 创建一个补丁。跑
    git格式补丁
  • 现在,将“开发”分支合并到要素分支<代码>git合并源/开发
  • 。这也将恢复功能分支中的更改
  • 重新应用补丁,
    git apply--index
  • 请记住,要进行最初不正确的其他更改。提交并推送
  • 还原还原提交 正如@Lasse所提到的,您可以恢复恢复提交。最好在功能分支中进行这些更改,然后提出PR以开发分支

    c1 -- c2 -- merge commit -- revert commit
      \         / 
        c3 -- c4 
    
    c3, c4 - commits that contain the feature branch changes 
    
  • 合并开发功能分支
  • git还原
  • 进行必要的更正,提交并推送更改
  • 重新设置要素分支的基础 这是最不可取的选项,因为它会重写要素分支历史。您可以运行
    git-rebase-i
    ,只需更改要合并的第一次提交的消息。这将创建新的当前和后续提交哈希,并允许您将其合并以进行开发。但有两个担忧

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

  • 功能分支与合并和恢复提交有什么关系?我这样问是因为你并不完全清楚为什么你希望公关包含任何变化。你说你恢复了合并,然后把它推到了开发阶段,你在功能分支上做了什么,你能概述一下那里发生了什么,使你期望PR显示更改吗?在开发分支上恢复合并提交后,我没有在功能分支上做任何更改。现在我想把它放回去发展,但我期待着看到公关上的承诺?它在PR上显示空白代码。如果您的功能分支没有提交,则没有要合并的内容。如果您想将合并中的更改恢复到开发中,最简单的方法可能是恢复。