前言: 使用git管理项目开发的过程中经常会碰到这种情况:某次提交已经push到了远程仓库,可是突然需要回退代码,怎么将远程代码库回滚呢?
不推荐这样做:在网上看到大部分人给出的解决方案是先将本地回滚,然后删除远程分支,之后再将本地的分支push到远程仓库,这其实是一种很危险的方案,毕竟直接删除远程分支太危险。
关于远程仓库回滚
首先,必须要明白的一件事,任何普通用户不能擅自做有关远程仓库回退的操作,如果你擅自回滚了远程仓库,会对项目团队其他人造成不可预知的影响。如果需要回退版本,先联系项目的仓库管理员,在团队其他人都对自己本地未提交的工作做好备份之后,再进行远程仓库回退操作,操作结束后,团队成员需要重新同步远程仓库后继续自己的工作。
通常回滚远程仓库会有以下三种情形:
1、删除最后一次提交
这种情况是最简单的了,只需要以下两步就可以了
git revert HEAD
git push origin master
注意,revert和reset的区别:
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"都会改变。
转载自 博客
相关推荐
主要介绍了IDEA通过git回滚到某个提交节点或某个版本的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
参与任何一个 Git 项目的协作,必须要了解该如何管理远程仓库。远程仓库是指托管在网络上的项目仓库,可能会有好多个,其中有些你只能读,另外有些可以写。同他人协作开发某个项目时,需要管理这些远程仓库,以便推...
git 删除分支和回滚的实例详解 【git 删除本地分支】 git branch -D br 【git 删除远程分支】 git push origin :br (origin 后面有空格) git代码库回滚: 指的是将代码库某分支退回到以前的某个commit id 【本地...
git是一个可以进行配置文件错误得回滚工具,在任何时候都不能避免误删文件得可能,这个就可以解决一些问题。
大家在日常开发中,经常会遇到需要将代码切回到之前的某个版本的情况,有可能是需要将代码回滚,也有可能需要查看之前的某个实现。遇到这样的情况,该怎么做呢?下面通过这篇文章来学习下Git中的回滚操作,有需要的...
1、仅在工作区修改的文件 2、已添加到暂存区的文件 3、已经commit,但是没有push 3、已经push到远端
linux添加远程仓库,Git创建远程仓库实例.docx
主要介绍了Git如何修改远程仓库地址,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
git最稳定版本版本可兼容win11
关于Ubuntu18.04本地搭建远程git仓库的过程以及注意事项。通过实际的搭建并已经验证通过,是可行的。
python git相关操作,git标签管理,介绍了git在远程仓库的链接,以及后期liunx运行程序
在对远程仓库做了git clone --mirror后,使用gitfetch工具实现git fetch的批量更新处理
Git采用SSH协议创建远程仓库,并把本地工程上传到远程仓库
介绍了如何从git客户端克隆远程仓库的分支,并建立跟踪关系 步骤较为详细,希望对初学者有用
主要介绍了如何使用Git优雅的回滚实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
运行git init命令来初始化一个新的Git仓库。 git init 3、关联远程仓库 在远程仓库中,复制仓库的URL。 在终端中运行以下命令,将本地仓库与远程仓库关联起来: 这里的"origin"是一个别名,你可以使用其他名称来表示...
按步骤详细介绍了如何安装git、git创建本地仓库、本地仓库如何关联GitHub远程及push内容到远程仓库中。
git官方版,稳定版本
Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。 [1] Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
远程仓库:是在远程服务器上的Git仓库 Clone:克隆,就是将远程仓库复制到本地 Push:推送,就是将本地仓库代码上传到远程仓库 Pull:拉取,就是将远程仓库代码下载到本地仓库 Git-2.20.1-64-bit.zip版本下载