Git远程删除某个历史提交记录方法详解

目录
  • 引言
  • 一、删除最后一次提交
  • 二、删除指定commit提交(非最后一次提交)

引言

在开发中经常会遇到在本地测试的代码或者隐私信息,一不小心提交到了远程仓库,即便立即删除了再提交,但是上次的提交记录在远程依旧可以查看。 特别是像账号密码、key文件这种,很可能造成隐私泄露。

分两种情况:

一、删除最后一次提交

这种情况比较简单,主要操作分两步:

  • 第一步:回滚上一次提交
git reset --hard HEAD^
  • 第二步:强制提交本地代码
git push origin master -f

由于本地reset之后本地库落后于远程几个版本,所以需要使用-f强制提交。

二、删除指定commit提交(非最后一次提交)

假定: 现在我们要删除commit--2这条提交记录

图例

  • 第一步:查看提交日志,获取要删除记录commit--2的前一次提交commit--1的提交ID

特别提示: rebase -i的ID一定是删除记录的前一次的提交ID

git reflog

展示如下内容:

b08ec3f HEAD@{4}: commit: commit--3
39841d1 HEAD@{5}: commit: commit--2
35f96e1 HEAD@{6}: commit: commit--1

拿到对应的提交ID为35f96e1

  • 第二步:rebase操作
git rebase -i 35f96e1
  • 执行完这个命令后,就可以看到 35f96e1 后的所有 commit 记录。如下图
  • 默认是使用 vim 编辑器打开了commit log list。然后我们就可以针对我们不需要的某些 log 进行删除。
  • 把原本的 pick 单词修改为 drop 就表示该ID对应的 commit log 我们需要删除。
  • vim保存退出。

  • 第三步:解决冲突,强制推送更新到远程
git add .                   # 冲突时使用
git commit -m "new commit"  # 冲突时使用
git rebase --continue       # 冲突时使用
git push origin master -f

再查看远程的提交记录,发现commit--2就没有了。

以上就是Git远程删除某个历史提交记录方法详解的详细内容,更多关于Git远程删除历史提交记录的资料请关注我们其它相关文章!

(0)

相关推荐

  • Git别名的使用

    1. 为什么要取别名? 别名,可以把较长的命令变得更加简洁.简单化,便于记忆: 别名,可以帮助我们节约大量的键盘敲打时间,相当于提升了我们的办公效率: 别名,可以有效改善我们的心情,当然也可以把个人的自身价值(bi ge)提高: 2. 定义 Git 别名 2.1 第一种方法:通过命令方式设置 这里列举了几种定义 Git 别名例子,大家可以照葫芦画瓢,举一反三. $ git config --global alias.gp pull $ git config --global alias.br b

  • GitHub配置SSH Key的完整步骤

    目录 步骤 一.设置git的user name和email 二.检查是否存在SSH Key 三.获取SSH Key 四.GitHub添加SSH Key 五.验证和修改 验证原理 总结 https://github.com/xiangshuo1992/preload.gitgit@github.com:xiangshuo1992/preload.git 这两个地址展示的是同一个项目,但是这两个地址之间有什么联系呢? 前者是https url 直接有效网址打开,但是用户每次通过git提交的时候都要输

  • 日常收集整理的Git常用命令

    Git 是一个很强大的分布式版本控制系统.它不但适用于管理大型开源软件的源代码,管理私人的文档和源代码也有很多优势. 查看.添加.提交.删除.找回,重置修改文件 git help <command> # 显示command的help git show # 显示某次提交的内容 git show $id git co -- <file> # 抛弃工作区修改 git co . # 抛弃工作区修改 git add <file> # 将工作文件修改提交到本地暂存区 git add

  • Git如何删除历史记录中的大文件详解

    前言 Git 作为一个分布式的版本管理工具,代码仓库中是会保存所有历史记录的.虽然,Git 的 .gitignore 文件里可以定义一些忽略文件的规则,但是,在我们提交代码的过程中,总会不小心误提一些没用的文件,如果文件中存在大文件,就会导致:就算我们把它删了重新提交,.git 文件夹依然会占用较大的空间. 如何解决这个问题呢?其实,Git 已经为我们提供了解决方案,就是被称为核弹级的命令 filter-branch.这个命令可以用来修改历史提交记录,把不需要的文件永久地从历史记录中删除. 方法

  • Git版本控制服务器详解

    目录 一.Git 简介 1.Git 特点 2.版本控制器 3.Git 工作流程 4.Git 的几个核心概念 二.基于 Linux 部署 Git 服务器 1.Git 使用 2.验证 三.使用 GitHub 1.注册账号 2.在客户端上生成密钥对 3.导入公钥密钥到 GitHub 4.创建储存空间 5.将本地项目上传到 GitHub 6.查看 GitHub 文件 7.同步远程仓库的最新状态到本地仓库 一.Git 简介 Git 是一款开源的分布式版本控制系统,可以有效.高效的处理从很小到非常大的项目版

  • Git远程删除某个历史提交记录方法详解

    目录 引言 一.删除最后一次提交 二.删除指定commit提交(非最后一次提交) 引言 在开发中经常会遇到在本地测试的代码或者隐私信息,一不小心提交到了远程仓库,即便立即删除了再提交,但是上次的提交记录在远程依旧可以查看. 特别是像账号密码.key文件这种,很可能造成隐私泄露. 分两种情况: 一.删除最后一次提交 这种情况比较简单,主要操作分两步: 第一步:回滚上一次提交 git reset --hard HEAD^ 第二步:强制提交本地代码 git push origin master -f

  • git rebase -i 修改历史提交的方法

    git rebase -i 修改历史提交 commit 3 add 22222 commit 2 add 11111 commit 1 create file 有如上三次提交,发现第二次提交有失误,准备修改第二次提交. git log –oneline 查看head f206555 add 2222 572a41e add 1111 c195175 feat:create file git rebase -i c195175 回到第一次提交的基础上 进入命令模式 选择进行edit 此时已经回到第

  • spring boot 防止重复提交实现方法详解

    本文实例讲述了spring boot 防止重复提交实现方法.分享给大家供大家参考,具体如下: 服务器端实现方案:同一客户端在2秒内对同一URL的提交视为重复提交 上代码吧 pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.or

  • javascript动态添加、修改、删除对象的属性与方法详解

    现在介绍如何为一个对象添加.修改或者删除属性和方法.在其他语言中,对象一旦生成,就不可更改了,要为一个对象添加修改成员必须要在对应的类中修改,并重新实例化,而且程序必须经过重新编译.JavaScript 中却非如此,它提供了灵活的机制来修改对象的行为,可以动态添加.修改.删除属性和方法.例如首先使用类Object来创建一个空对象user:var user=new Object(); 1.添加属性这时user 对象没有任何属性和方法,显然没有任何用途.但可以为它动态的添加属性和方法,例如:user

  • vue-vuex中使用commit提交mutation来修改state的方法详解

    在vuex中,关于修改state的方式,需要commit提交mutation.官方文档中有这么一句话: 更改 Vuex 的 store 中的状态的唯一方法是提交 mutation. 为了搞清楚其原因,查阅了很多资料,发现其它人在做vuex的源码解析的时候,并没有将这点说的很明白. 所以只好自己去查看vuex的源码,并且自己做demo进行验证. 但是试验后,发现直接修改state时,store中的state能够改变,并且是响应式的,并没有报错.跟commit提交mutation的方式没啥区别. 后

  • C# 删除数组内的某个值、一组值方法详解

    最近优化了一个权限校验的功能,之前每次其他系统在获取各自系统的权限配置时,sso都去找到本地对应的权限文件读取解析一次. 这种设计虽然可以实现功能,但是这种反复去读取的策略并不经济,尤其在高并发的情况下更可能会成为性能瓶颈. 于是我对这块业务进行了优化,而在优化的过程中针对如何去除数组内的某些参数试验了一些写法,下面记录我认为比较优雅的写法. 首先讲下场景,设计多系统的权限统一由sso控制,那么每次用户登录其他系统后需要向sso请求"用户在该系统已有的权限"或"该用户当前是否

  • VC List Control控件如何删除选中的记录实例详解

    VC List Control控件如何删除选中的记录实例详解 实例代码: OnButtonDelete() { POSITION pos = m_list.GetFirstSelectedItemPosition(); int idx = m_list.GetNextSelectedItem(pos); while (idx != -1){ LVITEM lvi; lvi.iItem = idx; lvi.iSubItem = 0; lvi.mask = LVIF_IMAGE; if (m_li

  • 对python list 遍历删除的正确方法详解

    在遍历list的时候,删除符合条件的数据,可是总是报异常,代码如下: num_list = [1, 2, 3, 4, 5] print(num_list) for i in range(len(num_list)): if num_list[i] == 2: num_list.pop(i) else: print(num_list[i]) print(num_list) 原因是在删除list中的元素后,list的实际长度变小了,但是循环次数没有减少,依然按照原来list的长度进行遍历,所以会造成

  • python集合删除多种方法详解

    这篇文章主要介绍了python集合删除多种方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 删除指定的元素 A={'a','c','b','d','e'} print("原集合:",A) A.remove('a') # 不存在会报错 print("删除a后:",A) A.discard('b') # 不存在不会报错 print("删除b后:",A) A.pop() print("

随机推荐