撤消git拉取(强制更新)

撤消git拉取(强制更新),git,Git,我已尝试将上次推送的提交还原到分支dev。在执行git push-f之后,我意识到branchmaster不是这台机器上的最新版本,所以我也意外地更改了master 我的下一步是使用不同的机器,master是最新版本。错误的一步是在那台机器上运行gitpull,它更新了所有分支,包括master 有没有办法恢复最后的拉力 做你想做的事情没有好的方法,因此强烈建议不要对git进行强制推送 如果您拥有丢失的提交的SHA,那么您可以cherry pick它们,即使您不再能够在git中看到提交,它仍然能

我已尝试将上次推送的提交还原到分支
dev
。在执行
git push-f
之后,我意识到branch
master
不是这台机器上的最新版本,所以我也意外地更改了
master

我的下一步是使用不同的机器,
master
是最新版本。错误的一步是在那台机器上运行
gitpull
,它更新了所有分支,包括
master


有没有办法恢复最后的拉力

做你想做的事情没有好的方法,因此强烈建议不要对git进行强制推送


如果您拥有丢失的提交的SHA,那么您可以
cherry pick
它们,即使您不再能够在git中看到提交,它仍然能够引用它们(我认为!)。另一种选择是找到另一台机器,上面有旧的提交,
cherry pick
您想要的提交,
还原您不想要的提交,然后执行另一个
git push-f
。(然后尽量不要再进行强制推送!)

@HBHB我想我有不同的情况,因为推送强制更新了提交树,而不是快进的提交树。你看了
reflog
?在这种情况下,这不是您在更改前拥有的
HEAD
吗?我认为
git checkout master;git reset--硬头@{1}
可以解决您的问题。链接为dup提交中的补救措施应该可以工作,尽管您必须在拥有最新版本的
master
的计算机上执行。“强制更新”仅适用于(该机器的)
origin/master
,因此只要其本地master良好,您就应该能够恢复。