已经还原后没有显示任何提交?

时间:2020-10-15 09:19:44

标签: git github

我已经合并了develop分支上的PR,但是分期存在问题,因此我使用以下命令进行了还原:

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

当我在Github上创建PR以将功能分支合并到develop时,即使我已还原了develop分支上的合并提交,也未在PR上显示任何提交/代码。

什么问题以及如何解决?

1 个答案:

答案 0 :(得分:1)

这里需要理解两个概念。

  1. 合并时,git比较两个分支的历史记录中的提交哈希,以确定要合并的提交。
  2. git revert通过创建新的提交来撤消上一个提交。请参阅Git Revert Doc。先前的提交不会从历史记录中删除。

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

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

c3, c4 - commits that contain the feature branch changes 

如果您现在尝试合并功能分支,由于c4 commit已在开发历史记录中,因此git将不会采取任何措施。

这可以通过以下方式解决。 link中对此场景进行了详细的讨论。

创建补丁并重新应用更改

  1. 在功能分支中,运行git log以确定需要合并更改才能提交开发分支。 (在我们的示例中为c3)。
  2. 创建补丁。跑, git format-patch <commit> <folder where patch file will be saved>
  3. 现在将develop分支合并到feature分支。 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. 您需要强行推送,因为您将重写远程功能分支的历史记录
相关问题