如何在推送失败后撤销提交?

4

我本想在dev分支上测试一些东西(只是将版本号从0.1改为0.2),所以我提交了更改,但我没有将其直接推送到dev的权限。于是,我创建了一个功能分支并发现版本号已经是0.2了,然后我将其改成了0.3并推送了这个分支,然后创建了一个合并请求将其合并到dev中。

我是git新手,想知道如何防止这种混乱情况的发生?我该如何在推送被拒绝后撤销我的提交?


这个回答解决了你的问题吗?Git-撤消推送的提交 - SwissCodeMen
@SwissCodeMen:这是针对git push已经成功的情况,然后你意识到,哎呀,这真的是个坏主意。 - torek
我不会现在将其标记为重复(尚?),但请参阅如何在Git中撤消最近的本地提交? - torek
3个回答

8

你可以使用以下命令通过还原最新的提交来解决这个问题

git reset HEAD~

这将撤销您最后一次提交,并将您上次提交的更改返回到未提交状态。然后,您可以checkout一个特性分支,进行提交并将该特性分支推送到远程repo。


2
您可以简单地从Git历史记录中删除提交。
如果提交还没有被推送,以下步骤可以起作用-
1. 进入您要删除的提交。 2. 运行 git rebase -i HEAD~2 3. 在打开的文件中,将提交条目之前的 pick 更改为 drop。 4. 退出编辑器。现在,您应该看到最后一个提交已经消失了。
如果您已经推送了不想要的提交,则需要强制推送到远程。但是,强制推送仅适用于特性分支-永远不要强制推送到主分支!

0

类似于roshnet所提供的答案,我使用GUI应用程序“Git Extensions”来实现此功能,具体步骤如下:

  1. 右击我想要重置/回滚到的提交
  2. 选择选项“将当前分支变基为 >”,并选择子选项“交互式选择提交…”

(点击查看图片,因为我的声望太低无法嵌入)
右键单击菜单以使用交互式变基撤消提交

这将打开一个编辑器窗口,用于变基git命令,让您选择如何处理删除变基提交上面的提交,并且还有一个词汇表解释每个命令的作用。

(点击查看图片,因为我的声望太低无法嵌入)
初始编辑器窗口

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

(点击查看图片,我的声望太低无法嵌入)
3. 弹出式编辑器窗口

  1. 然后我点击了“保存”按钮并关闭了编辑器窗口,在命令弹出窗口上点击“确定”,完成了操作。

我的未推送提交已经消失了,我的本地库现在已经重置回与起源库相同的提交头。我的暂存区和工作目录也被清空了。但是幸运的是,我备份了我的新文件,并且可以将它们重新提交到我有推送权限的单独分支。

有关使用Git Extensions(一款免费的Git GUI应用程序)进行变基的更多文档,请参见此处:Git Extensions - How To:压缩和变基您的更改


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接