从分支 B 合并时,在分支 A 上恢复的提交不存在
Posted
技术标签:
【中文标题】从分支 B 合并时,在分支 A 上恢复的提交不存在【英文标题】:commit reverted on branch A not present when merged from branch B 【发布时间】:2022-01-23 21:54:16 【问题描述】:我不小心提交到分支dev
,而不是feature-branch
,并推送到远程。根据git undo commit on protected branch?的建议,我采取了以下步骤来撤消dev
上的提交并将其提交给feature-branch
在dev
上,在本地撤消提交并将其隐藏,以便稍后将其提交给feature-branch
:
git reset --soft HEAD~1
git restore --staged .
git stash
git pull
git revert SHA-1
git commit -m "reverting commit made to wrong branch"
git push
在feature-branch
:
git stash pop
git add .
, git commit -m "making commit in the right place"
太好了。此时,dev
回到了我错误地在那里提交之前的位置,feature-branch
有了新的更改。然后我做了更多的工作并向feature-branch
添加了更多的提交。
在创建从feature-branch
到dev
的拉取请求并将其合并后,dev
上似乎不存在已恢复的提交。
这里发生了什么?
现在我将只创建一个新分支并手动重写提交,但我不明白为什么这一系列事件导致我在我的 IDE(vscode 和 gitlens)中看到差异,但 github 告诉我没有区别吗?
【问题讨论】:
您在feature-branch
中进行了哪些提交?它是在您还原的原始提交之前、原始提交和还原之间还是在还原提交之后对dev
的提交?
这是一个很好的问题......老实说,在这一点上我不能确定我到底是用哪种方式做到的。每个场景将如何发展?
请注意,您可以查看git log --graph
来回答来自@bk2204 的问题。你会确切地看到你从哪个提交分支出来。
如果您在合并后显示dev
的git log --graph
可能会有所帮助,然后解释您所说的“已恢复的提交不存在于开发人员”的意思。
有点与问题无关,但我认为git stash apply
可能只是git stash
?因为“应用”会将现有的存储区放入您的工作目录,听起来您做了相反的事情,这只是从工作目录中的文件创建一个新的存储区。
【参考方案1】:
tl;dr:您似乎为同一个问题尝试了两种不同的解决方案,但最终没有按照您的想法去做。
如果您不小心向dev
提交了一些问题,并且想要修复它,您有两种(类别)方法来处理它:
-
您可以
reset
回到上一个提交,实质上是删除最近的提交。
你可以revert
提交。
目前尚不清楚您是否推出了带有错误提交的dev
,但根据描述,我怀疑您可能没有推出。在那种情况下,reset
将是最好的选择。如果您已经推送了错误的提交并且其他人可能已经在使用它,那么revert
会是最好的。显然你试图做这两个;看起来您先进行了重置,然后进行了还原。
第一次重置“删除”了提交,然后尝试恢复不存在的内容是行不通的,所以你会留在你开始的地方。 (您还记得在尝试时看到过任何关于此效果的消息吗?)
注意,如果您之前推出了 dev
并决定恢复是要走的路,在重置提交后,如果不强制推送,您将无法执行 git push
。
旁注,要将提交移至feature-branch
,您可以简单地通过dev
上的哈希ID 提交cherry-pick
,而不是尝试完成额外的存储工作,我怀疑是导致您走上这条道路的原因。
提示:我强烈建议使用git log
或git log --graph
经常。考虑使用显示分支历史的 UI,并在每次提交后刷新它,这样您就可以准确地看到自己在做什么,并且错误会变得很明显。
【讨论】:
“我怀疑你可能没有 [push our dev]” - 不幸的是我确实推送到了遥控器。我编辑了这个问题以反映这一点。另外,我调整了我采取的步骤。我忘了提到,在我进行了重置、恢复和存储之后,我做了一个git pull
。这是一种隐藏我需要的提交的愚蠢方式,因此我可以将它带到feature-branch
,同时保持远程和本地之间的dev
一致。是的,git log --graph
在这种情况下会是一个非常好的主意¯\_(⊙_ʖ⊙)_/¯,希望这些新细节能让问题更清晰
@SethLutske 好的编辑,您在重置后拉动的事实更有意义。现在我有更多的说明,我将在问题级别提出。以上是关于从分支 B 合并时,在分支 A 上恢复的提交不存在的主要内容,如果未能解决你的问题,请参考以下文章