如何取消提交最后一个未推送的git提交而不会丢失更改

有没有办法恢复一个提交,以便我的本地副本保持在该提交所做的更改,但他们成为我的工作副本中未提交的更改? 回滚一个提交会带你到前一个提交 – 我想保留所做的更改,但是我将它们提交给了错误的分支。

这并没有被推动,只是承诺。

有很多方法可以这样做,例如:

如果你还没有公开推动提交:

 git reset HEAD~1 --soft 

就是这样,您的提交更改将在您的工作目录中,而最后的提交将从您当前的分支中删除。 看到git重置人


如果你公开推送(在一个叫“主”的分支上):

 git checkout -b MyCommit //save your commit in a separate branch 

正常恢复提交并推送

 git checkout master git revert a8172f36 git push origin master 

现在引入分支的变化

 git merge MyCommit --no-commit 

如果您推送了更改,则可以将其undo并将文件移回到舞台而不使用其他分支。

 git show HEAD > patch git revert HEAD git apply patch 

它将创build一个包含最后一个分支更改的补丁文件。 然后它恢复更改。 最后,将补丁文件应用到工作树上。