推送失败后如何撤消提交?

How to undo a commit after a failed push?

我打算在 dev 分支中测试一些东西(只是版本号 0.1 --> 0.2),所以我提交了更改,但我没有直接将其推送到 dev 的权限,然后我创建了一个feature 分支,我发现数字已经是 0.2,然后我将它更改为 0.3 并推送了这个分支,然后创建了一个合并请求将其合并到 dev.

我是 git 的新手,只是想知道以后如何防止这种混乱?推送被拒绝后如何恢复我的提交?

您可以通过使用命令恢复上次提交来解决它

git reset HEAD~

这将撤消您的上次提交并将您对上次提交的更改恢复为未提交状态。然后您可以检出一个功能分支,进行提交并将功能分支推送到您的远程仓库。

您可以简单地从您的 Git 历史记录中删除提交。

如果提交还没有被推送,下面的步骤可以工作-

  1. 开始您要删除的提交。

  2. 运行 git rebase -i HEAD~2

  3. 在打开的文件中的提交条目之前,将pick更改为drop.

  4. 退出编辑器。您现在应该看到最后一次提交消失了。

如果您已经推送了不需要的提交,则需要强制推送到远程。但是,强制推送只适用于功能分支 - 永远不要强制推送到 master!

类似于 roshnet 的回答,我能够使用 GUI 应用程序“Git 扩展”,

  1. right-clicking 我想 reset/rebase 返回,
  2. 选择选项“将当前分支重新设置为>”,sub-option“选择交互式提交...

(点击查看图片,因为我的代表太低无法嵌入它们)
right-click menu for undoing a commit with an interactive rebase

这会为变基 git 命令打开一个编辑器 window,它允许您选择如何处理删除变基提交之上的提交,并且还有一个词汇表解释每个命令的作用。

(点击查看图片,因为我的代表太低无法嵌入它们)
Initial editor window

对我来说,我想撤消添加了几个新文件的提交,我已经在外部文件夹中备份了这些文件。所以我把 'pick' 改成了 'drop',像这样:

(点击查看图片,因为我的代表太低无法嵌入它们)
3.pop-up editor window

  1. 然后我点了'save'按钮,关闭了编辑器window,在命令pop-upwindow上点了'OK',就完成了.

我的 un-pushed 提交现在消失了,我的本地仓库现在重置回与 Origin 仓库相同的提交头。我的暂存目录和工作目录也被清空了。但值得庆幸的是,我已经备份了我的新文件,并且可以 re-commit 将它们保存到我确实拥有推送权限的单独分支。

可以在此处找到有关使用 Git 扩展(免费的 git gui 应用程序)进行变基的更多文档:Git Extensions - How To: Squash and Rebase your changes