小编典典

如何在不丢失更改的情况下取消提交最后一次未推送的 git commit

all

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

这没有被推送,只是提交。


阅读 118

收藏
2022-03-02

共1个答案

小编典典

有很多方法可以做到这一点,例如:

如果您 尚未 公开提交提交:

git reset HEAD~1 --soft

就是这样,您的提交更改将在您的工作目录中,而 LAST 提交将从您当前的分支中删除。见git reset man


如果您 确实 公开推送(在名为“master”的分支上):

git checkout -b MyCommit //save your commit in a separate branch just in case (so you don't have to dig it from reflog in case you screw up :) )

正常恢复提交并推送

git checkout master
git revert a8172f36 #hash of the commit you want to destroy
# this introduces a new commit (say, it's hash is 86b48ba) which removes changes, introduced in the commit in question (but those changes are still visible in the history)
git push origin master

现在,如果您想在工作副本中进行本地更改时进行这些更改(“以便您的本地副本保留在该提交中所做的更改”) - 只需使用以下--no- commit选项恢复还原提交:

git revert --no-commit 86b48ba (hash of the revert commit).

我制作了一个小例子:https ://github.com/Isantipov/git-
revert/commits/master

2022-03-02