git如何回滚远程仓库

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

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

关于远程仓库回滚

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

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

1、删除最后一次提交

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

    git revert HEAD
    git push origin master

注意,revertreset的区别:

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

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

    git revert HEAD
    git log

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

    git reset --hard HEAD^
    git log

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

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

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

2、删除历史某次提交

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

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

    git rebase -i "commit id"^

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

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

    git push origin master -f

3、修改历史某次提交

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

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

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

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

原文

时间: 2024-10-28 18:54:34

git如何回滚远程仓库的相关文章

git回滚远程仓库代码/错提master分支的恢复

前言 今天周五了,刚接了个新微服务模块,下班前高高兴兴开发完,提交git代码,jenkins发布到测试环境.突然看到一个提示 我最近提的代码呢?!! 想到可能会提错仓库,转念一想,不对呀,我怎有这么高的权限提到master呢? 去gitlab上看看,果然是推到了Master分支!/泪目 /泪目 于是有了这篇折腾记录! 正文 推送代码到正确的仓库 首先我得把现有的代码搞到dev分支,当前是在master上,master已经检出到本地master分支上了, 直接用现成的 master -> orgi

Git回滚远程版本

摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “房子是租的 但生活不是” 1.故事的开始 远程master分支下代码被不小心提交了很多垃圾代码或项目删掉,想要回滚到以前的某一版本并删除commit log.怎么办?情景如图: 情景很简单.老板上传了个文件,我把他删掉了.有一种办法,把文件再push下,但是也不想他看到图中那comment(ps:这样我才不会被fire).实现上面场景的代码如下: vim A.txt git add . gi

git本地代码回滚

git本地操作有时会有误删误改并提交的时候,此时可以通过回滚获得之前的特定版本 1. 查看log 输入  git log  查看commit记录 [xxxxxxx]$ git log 结果大致如下(根据实际的commit操作不同,显示结果也会有所不同) commit 7d72d974a9ed718dc1f50194879d4409a9f5db4b (origin/qxw) Merge: 99f3694 789a222 Author: taochengye <[email protected]>

Android基础入门教程——1.5.1 Git使用教程之本地仓库的基本操作

Android基础入门教程--1.5.1 Git使用教程之本地仓库的基本操作 Git是什么? 一个分布式版本控制系统,和SVN类似,但远比SVN强大的一个版本控制系统 ①Git可以方便的在本地进行版本管理,如同你本地有一个版本管理服务器一样 我们可以选择在合适的时间将本地版本推送到统一的版本管理服务器 ②Git每次会提取整个代码仓库的完整镜像,相当于对整个代码仓库都进行了一次备份,这样计时版本服务器除了问题,我们可以直接采用本地仓库恢复!结合本地版本管理功能,远程版本管理服务器出问题了,我们依然

Git学习笔记(一) --- --- git的安装及本地仓库的创建,github上仓库的连接方式

首先了解git的作用是什么,本地仓库,中央仓库都是干什么的? Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上.实际情况往往是这样,找一台电脑充当服务器的角色,每天24小时开机,其他每个人都从这个"服务器"仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交. 一. git的下载与安装: 1. 下载地址:https://www.git-scm.com/download/win 2. 安装,注意改一下安装路径并且牢记你装在

git提交代码至远程仓库

代码提交 代码提交一般有五个步骤: 1.查看目前代码的修改状态 2.查看代码修改内容 3.暂存需要提交的文件 4.提交已暂存的文件 5.同步到服务器 1.     查看目前代码的修改状态 提交代码之前,首先应该检查目前所做的修改,运行git status命令 a)        已暂存 (changes to be committed) new file //表示新建文件 modified //表示修改文件 deleted //表示删除文件 b)       已修改 (changed but n

Git 恢复误删除的本地仓库文件

在工作中使用首先使用git add *添加文件到本地仓库里,git commit -m "****"之后发现添加了一些自己不想提交的代码:所以使用了git rm *~删除了本地仓库里所有add的文件,最后发现本地代码也没有了,怎么办? 1.首先使用git log ./查看下最近一次commit的信息及时间    # git log ./ commit e2f22e1a4f2263441c86df0cf356e13ce20190b8 Author: zlyang999 <dba_m

windows下使用git和github建立远程仓库

从昨天开始就在看git的使用,因为在Windows下很多命令行操作都比较坑爹,但是今天再走了无数弯路之后终于完成了git本地仓库和远程仓库的关联,记录如下, 首先感谢廖大神的博客的http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000, 同时感谢这位朋友http://blog.baibaobing.com/other/99.html的记录帮我解决了问题. 正文开始, 我会结合一个实例来介

git使用小结二: git的分支和远程仓库

上一篇文章介绍了git的本地基本操作,如果你不需要和他人协作,比如说你自己写一本书,自己写一个小程序,自己写个网站等等,那么已经差不多够用了.但是分享和协作才是自由世界的主题,git也正是为此而生,所以努力成为一个热爱分享和协作的同学吧!^_^ git的仓库的概念可以理解为git管理的那个文件夹,而git远程仓库可以理解为存放在服务器上的大家都可以用git访问的一个git管理的文件夹.(原谅我的大白话,虽然事实必定比这种解释高大上,不过我个人感觉这么理解也无伤大雅-)而要理解远程仓库,就需要理解