首页 > 解决方案 > 撤消“还原拉取请求”

问题描述

我在 Github 上合并了一个 PR,不得不还原它,所以我使用了 Github 界面上的还原按钮来做。一个新的 PR 是从与恢复的相同的分支中创建的,但添加了一些内容。当我合并新 PR 时,旧 PR 的某些更改部分丢失了。

请注意,还原后添加了一些提交

我正在考虑使用 Github UI 再次恢复以前的恢复,但我不确定这会做什么,找不到任何与此相关的文档。

我很想知道为什么代码会丢失以及如何避免这种情况。还有什么是解决这个问题的最佳方法,再次使用恢复选项?

ed3240aa (HEAD -> version/2, origin/version/2) Merge branch 'version/2' of github.com:umbrella/app into version/2
8d7b6a8f Bump version of app
8b268172 Fix error in condition for disavowing excluded alerts
a12eca40 Point app to staging
5c83c0bb Merge pull request #1090 from umbrella/revert-1088-add-sentiment   // Merge PR with reversion
3ab766fc Revert "Add sentiment insight"                                     // Revert happened here
132a9e64 Merge pull request #1089 from umbrella/nana_sources
acaec5e0 Merge branch 'version/2' into nana_sources
881925d7 - finished showing the dimension sources
df0b0ead Merge pull request #1088 from umbrella/add-sentiment
5bc3165d Merge pull request #1087 from umbrella/sync-exclude
c6936a2e (origin/sync-exclude, sync-exclude) Remove spurious logs

标签: gitgithub

解决方案


当您还原时,git 会创建一个新的提交,其中包含还原的提交的“相反”。例如,假设你做了一个git revert 39f5,那么你有这个:

* 8998 (HEAD -> master) Revert "Do stuff that is needed"
* 39f5 Do stuff that is needed
* 8573 First commit

8998提交是还原,但它仍然是正常的提交。它只包含“相反”作为39f5. 就像您手动取消所有更改一样。

所以如果你继续工作,所有的工作39f7都不再存在了!如果您提出拉取请求,则不包括在内。如果您希望将其包含在内,您有两种选择:

  1. 您可以还原还原。git revert 8998将摆脱还原,您将恢复原始更改(其中有错误)。然后,在另一个提交中修复错误并执行您的拉取请求。

  2. 您可以重置还原。git reset 39f5将返回到 commit 39f5,并“擦除”还原。它不会再出现在你的历史中,所以所有的变化39f5都会在那里。再次,修复另一个提​​交中的错误并执行拉取请求。

如果您是 git 新手,我推荐选项 1,因为它更宽容 - 更改保留在您的历史记录中,如果您搞砸了,您可以返回它们。当你有更多的 git 经验时,你会知道选项 1 和选项 2 之间哪个更合适,并且可以多玩一点。


推荐阅读