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



我意外地提交到分支dev,而不是feature-branch,并推送到远程。根据git undo-commit对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,并决定采用revert,那么在重置回提交后,如果没有强制推送,您将无法执行git push

附带说明的是,要将提交转移到feature-branch,您可以简单地通过dev上的哈希ID来cherry-pick提交,而不是试图完成隐藏它的额外工作,我怀疑这正是导致您一开始就走上这条路的原因。

提示:我强烈建议经常使用git loggit log --graph。考虑使用一个显示分支历史记录的UI,并在每次提交后刷新它,这样你就可以准确地看到你在做什么,错误就会变得显而易见。

最新更新