开发者社区> 梁东升> 正文

git如何回滚远程仓库

简介: git如何回滚远程仓库 2016-04-11 /  mtxc 使用git管理项目开发的过程中经常会碰到这种情况:某次提交已经push到了远程仓库,可是突然意识到“天哪,我怎么做了这么蠢的事情”。
+关注继续查看

git如何回滚远程仓库

使用git管理项目开发的过程中经常会碰到这种情况:某次提交已经push到了远程仓库,可是突然意识到“天哪,我怎么做了这么蠢的事情”。那么问题来了,怎么将远程代码库回滚呢?

在网上看到大部分人给出的解决方案是先将本地回滚,然后删除远程分支,之后再将本地的分支push到远程仓库,这其实是一种很危险的方案,毕竟直接删除远程分支太狠了,不推荐这样做。。。

关于远程仓库回滚

首先,必须要明白的一件事,任何普通用户不能擅自做有关远程仓库回退的操作,如果你擅自回滚了远程仓库,会对项目团队其他人造成不可预知的影响。如果需要回退版本,先联系项目的仓库管理员,在团队其他人都对自己本地未提交的工作做好备份之后,再进行远程仓库回退操作,操作结束后,团队成员需要重新同步远程仓库后继续自己的工作。

通常回滚远程仓库会有以下三种情形:

1、删除最后一次提交

这种情况是最简单的了,只需要以下两步就可以了

    git revert HEAD
    git push origin master

注意,revertreset的区别:

revert是放弃指定提交的修改,但是会生成一次新的提交,需要填写提交注释,以前的历史记录都在,而reset是指将HEAD指针指到指定提交,历史记录中不会出现放弃的提交记录。如果还没有理解的话,我们做如下测试:
假设我们有以下三次提交记录:

log

现在我们使用revert放弃最后一次提交,之后执行git log:

    git revert HEAD
    git log

revert

历史记录中还有第三次提交的记录,并且多了一次的提交,但是仓库内容已经回到了第二次提交之后的状态。 现在我们使用reset回到第三次提交,之后执行git log:

    git reset --hard HEAD^
    git log

reset

历史记录中已经没有之前revert生成的提交记录了,现在应该明白了吧。 如果删除远程仓库的最后一次提交的时候不需要保留历史记录的话,可以使用reset,命令如下:

    git reset --hard HEAD^
    git push origin master -f

-f 参数是强制提交,因为reset之后本地库落后于远程库一个版本,因此需要强制提交。

2、删除历史某次提交

这种情况需要先用git log命令在历史记录中查找到想要删除的某次提交的commit id,比如下图中圈出来的就是注释为"2"的提交的commit id(由此可见提交的注释很重要,一定要认真写)

commit

然后执行以下命令("commit id"替换为想要删除的提交的"commit id",需要注意最后的^号,意思是commit id的前一次提交):

    git rebase -i "commit id"^

执行该条命令之后会打开一个编辑框,内容如下,列出了包含该次提交在内之后的所有提交。

rebase

然后在编辑框中删除你想要删除的提交所在行,然后保存退出就好啦,如果有冲突的需要解决冲突。接下来,执行以下命令,将本地仓库提交到远程库就完成了:

    git push origin master -f

3、修改历史某次提交

这种情况的解决方法类似于第二种情况,只需要在第二条打开编辑框之后,将你想要修改的提交所在行的pick替换成edit然后保存退出,这个时候rebase会停在你要修改的提交,然后做你需要的修改,修改完毕之后,执行以下命令:

    git add .
    git commit --amend
    git rebase --continue

如果你在之前的编辑框修改了n行,也就是说要对n次提交做修改,则需要重复执行以上步骤n次。

需要注意的是,在执行rebase命令对指定提交修改或删除之后,该次提交之后的所有提交的"commit id"都会改变。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Vue快速入门(附实战小项目:记事本、天气预报、音乐播放器)
Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。 ​ Vue通过MVVM模式,能够实现视图与模型的双向绑定。 ​ 简单来说,就是数据变化的时候, 页面会自动刷新, 页面变化的时候,数据也会自动变化.
5 0
Markdown 拓展-Hexo 搭建博客(上)
前言 一直想搭建个人网站, 当我了解到 hexo 是一款快速、简洁且高效的博客框架,我就迫不及待想尝试下。
4 0
使用Git将项目上传到GitHub(Windows+Linux双教程)
使用Git将项目上传到GitHub(Windows+Linux双教程)
6 0
Ant打包安卓apk(4)-多渠道(配置)打包方案
目标 虽然用不上渠道的概念, 其实其实和渠道的概念类似, 其实就是多几个可以变更的字段配置 目前我需要一个boolean, 一个请求的url, config.url =http://10.1.64.42:9082/insure-pad/padServer.do, config.bool = false 我想加快apk打包速度啊, 一方面是还在用eclipse, 二来如果用普通的gradle的farvor方式还是不够快,美团都有v2方案了, 自己搞一搞比较有意思而已 META-INF目录下添加额外信息(不推荐) 然后从代码中读取需要的字段即可 探测敌情 我的思考 我写出了这种形式,htt
5 0
iOS逆向-day2:逆向环境搭建-SSH 安全连接(上)
1、SSH与OpenSSH简介 2、Mac远程登录到iPhone 3、iOS下的2个常用账户:root、mobile 4、SSL和OpenSSL 5、建立安全连接与服务器公钥的保存和变更 6、SSH-客户端认证 7、SSH-远程拷贝-文件权限 8、22端口 9、通过USB进行SSH登录 10、usbmuxd-使用 11、利用sh脚本设置快捷方式 12、Mac连接iPhone终端的中文乱码问题
4 0
iOS逆向-day2:逆向环境搭建-SSH 安全连接(下)
iOS逆向-day2:逆向环境搭建-SSH 安全连接(下)
5 0
服务注册中心---服务发现nacos
服务注册中心---服务发现nacos
3 0
数据中台为什么不好搞?
数据中台落地的关键在于计算引擎,而计算引擎需要具备独立且完备的计算能力、应对多样性数据源的开放性、开发的高效性以应对不停变化的前台需求。
5 0
Linux命令汇总 | vim | shell | 进阶【2022版】
Linux,全称GNU/Linux,是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯·本纳第克特·托瓦兹于1991年10月5日首次发布。 它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。 Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux有上百种不同的发行版,如基于社区开发的debian、archlinux,和基于商业开发的Red Hat Enterprise Linux、SUSE等。
5 0
01-小程序:开发入门篇
01-小程序:开发入门篇
1 0
+关注
梁东升
老男孩一枚
111
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载