我意外地提交到分支dev
,而不是feature-branch
,并推送到远程。根据git undo-commit对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告诉我没有差异?
tl;dr:你似乎对同一个问题尝试了两种不同的解决方案,但最终没有做你认为你做了的事情。
如果您意外地向dev
提交了一些内容,并想修复它,您有两种(类别(方法来处理它:
- 您可以
reset
返回到上一次提交,实质上删除最近的提交 - 您可以
revert
提交
目前尚不清楚您是否推出了带有错误提交的dev
,但根据描述,我怀疑您可能没有。在这种情况下,reset
将是最好的选择。如果你已经推送了错误的提交,而其他人可能已经在使用它,那么revert
将是最好的。显然,你试图同时做到这两件事;看起来你先重置了一次,然后又恢复了一次。
第一次复位";删除";提交,然后尝试恢复不存在的东西是不起作用的,所以你会被留在开始的地方。(你还记得在尝试时看到过这种效果的消息吗?(
请注意,如果您之前推出了dev
,并决定采用revert,那么在重置回提交后,如果没有强制推送,您将无法执行git push
。
附带说明的是,要将提交转移到feature-branch
,您可以简单地通过dev
上的哈希ID来cherry-pick
提交,而不是试图完成隐藏它的额外工作,我怀疑这正是导致您一开始就走上这条路的原因。
提示:我强烈建议经常使用git log
或git log --graph
。考虑使用一个显示分支历史记录的UI,并在每次提交后刷新它,这样你就可以准确地看到你在做什么,错误就会变得显而易见。