我本想在dev分支上测试一些东西(只是将版本号从0.1改为0.2),所以我提交了更改,但我没有将其直接推送到dev的权限。于是,我创建了一个功能分支并发现版本号已经是0.2了,然后我将其改成了0.3并推送了这个分支,然后创建了一个合并请求将其合并到dev中。
我是git新手,想知道如何防止这种混乱情况的发生?我该如何在推送被拒绝后撤销我的提交?
我本想在dev分支上测试一些东西(只是将版本号从0.1改为0.2),所以我提交了更改,但我没有将其直接推送到dev的权限。于是,我创建了一个功能分支并发现版本号已经是0.2了,然后我将其改成了0.3并推送了这个分支,然后创建了一个合并请求将其合并到dev中。
我是git新手,想知道如何防止这种混乱情况的发生?我该如何在推送被拒绝后撤销我的提交?
你可以使用以下命令通过还原最新的提交来解决这个问题
git reset HEAD~
这将撤销您最后一次提交,并将您上次提交的更改返回到未提交状态。然后,您可以checkout一个特性分支,进行提交并将该特性分支推送到远程repo。
git rebase -i HEAD~2
3. 在打开的文件中,将提交条目之前的 pick
更改为 drop
。
4. 退出编辑器。现在,您应该看到最后一个提交已经消失了。类似于roshnet所提供的答案,我使用GUI应用程序“Git Extensions”来实现此功能,具体步骤如下:
(点击查看图片,因为我的声望太低无法嵌入)
右键单击菜单以使用交互式变基撤消提交
这将打开一个编辑器窗口,用于变基git命令,让您选择如何处理删除变基提交上面的提交,并且还有一个词汇表解释每个命令的作用。
(点击查看图片,因为我的声望太低无法嵌入)
初始编辑器窗口
对我来说,我想要撤消一个添加了几个新文件的提交,而我已经在外部文件夹中备份了这些文件。所以我将'pick'更改为'drop',就像这样:
(点击查看图片,我的声望太低无法嵌入)
3. 弹出式编辑器窗口
我的未推送提交已经消失了,我的本地库现在已经重置回与起源库相同的提交头。我的暂存区和工作目录也被清空了。但是幸运的是,我备份了我的新文件,并且可以将它们重新提交到我有推送权限的单独分支。
有关使用Git Extensions(一款免费的Git GUI应用程序)进行变基的更多文档,请参见此处:Git Extensions - How To:压缩和变基您的更改
git push
已经成功的情况,然后你意识到,哎呀,这真的是个坏主意。 - torek