从分支 B 合并时,分支 A 上的提交不存在

commit reverted on branch A not present when merged from branch B

我不小心提交到分支 dev,而不是 feature-branch,并推送到远程。根据 git undo commit on protected branch? 的建议,我采取了以下步骤来撤消对 dev 的提交并将其提交到 feature-branch

dev 上,撤消本地提交并将其存储起来,以便我稍后可以将其提交到 feature-branch:

  1. git reset --soft HEAD~1
  2. git restore --staged .
  3. git stash
  4. git pull
  5. git revert SHA-1
  6. git commit -m "reverting commit made to wrong branch"
  7. git push

feature-branch 上:

  1. git stash pop
  2. git add .git commit -m "making commit in the right place"

太棒了。在这一点上,dev 回到了我在那里错误地提交之前的位置,并且 feature-branch 有了新的变化。然后我做了更多工作并向 feature-branch.

添加了更多提交

创建从 feature-branchdev 的拉取请求并将其合并后,似乎已还原的提交不存在于 dev

这里发生了什么?

现在我只会创建一个新分支并手动重写提交,但我不明白为什么这一系列事件导致我在 IDE 中看到差异(vscode 和 gitlens),但是 github 告诉我没有差异?

tl;dr: 看来您针对同一个问题尝试了两种不同的解决方案,但最终没有按照您的想法行事。

如果您不小心向 dev 提交了某些内容并想修复它,您有两种(类别)方法来处理它:

  1. 您可以reset返回上一个提交,实质上是删除最近的提交。
  2. 您可以revert提交。

不清楚您是否推出了 dev 并提交了错误,但根据描述,我怀疑您可能没有。在那种情况下,reset 将是最好的方法。如果您已经推送了错误的提交并且其他人可能已经在使用它,那么 revert 会是最好的。显然你试图同时做这两件事;看起来您先进行了重置,然后进行了还原。

第一次重置“删除”了提交,然后尝试还原不存在的内容是行不通的,因此您会留在开始的地方。 (您还记得在尝试时看到过任何这样的信息吗?)

请注意,如果您之前推出 dev 并决定恢复是要走的路,在重置提交后您将无法执行 git push 如果没有强制推送。

旁注,要将该提交移动到 feature-branch,您可以简单地 cherry-pick 通过它在 dev 上的哈希 ID 提交,而不是尝试通过存储它的额外工作,我怀疑这就是导致您开始走这条路的原因。

提示:我强烈建议经常使用 git loggit log --graph 。考虑使用 UI 来显示分支历史并在每次提交后刷新它,这样您就可以准确地看到自己在做什么,并且错误会变得很明显。