如何删除除最后五个之外的所有 Git 提交

2024-01-09

我有一个非常大的 Git 存储库,其中仅包含经常更改的二进制文件。当然,Git 存储库是much比其中的实际文件大。我并不真正关心旧的历史记录,我只需要一些较新的历史记录就能够恢复一些错误的更改。假设我想删除除最后五个之外的所有提交。

当然,我想这样做是为了保持存储库较小,因此必须从存储库中完全清除已删除的提交。

我想使用单个命令(别名)或脚本以非交互方式完成所有这些操作。我怎样才能做到这一点?


这是一个rebase-last-five别名来帮助您入门。它将重新创建当前分支,因此历史记录中只有最近的五个提交。最好将其作为一个脚本(git-rebase-last-five.sh)可以在您的目录中找到PATH; Git 将查找并使用名为git-....sh无需任何特殊配置。该脚本应该比这个简单的别名执行更多的错误检查和处理。

$ git config --global alias.rebase-last-five '!b="$(git branch --no-color | cut -c3-)" ; h="$(git rev-parse $b)" ; echo "Current branch: $b $h" ; c="$(git rev-parse $b~4)" ; echo "Recreating $b branch with initial commit $c ..." ; git checkout --orphan new-start $c ; git commit -C $c ; git rebase --onto new-start $c $b ; git branch -d new-start ; git gc'

买者自负: 请注意关于改变历史的警告 http://git-scm.com/docs/git-rebase#_recovering_from_upstream_rebase.

检查man pages (git help <command> or online http://git-scm.com/docs) 了解更多信息。

用法示例:

$ git --version
git version 1.7.12.rc2.16.g034161a
$ git log --all --graph --decorate --oneline
* e4b2337 (HEAD, master) 9
* e508980 8
* 01927dd 7
* 75c0fdb 6
* 20edb42 5
* 1260648 4
* b3d6cc8 3
* 187a0ef 2
* e5d09cf 1
* 07bf1e2 initial
$ git rebase-last-five 
Current branch: master e4b2337ef33d446bbb48cbc86b44afc964ba0712
Recreating master branch with initial commit 20edb42a06ae987463016e7f2c08e9df10fd94a0 ...
Switched to a new branch 'new-start'
[new-start (root-commit) 06ed4d5] 5
 1 file changed, 1 insertion(+)
 create mode 100644 A
First, rewinding head to replay your work on top of it...
Applying: 6
Applying: 7
Applying: 8
Applying: 9
Deleted branch new-start (was 06ed4d5).
Counting objects: 35, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (35/35), done.
Total 35 (delta 4), reused 0 (delta 0)
$ git log --all --graph --decorate --oneline
* a7fb54b (HEAD, master) 9
* 413e5b0 8
* 638a1ae 7
* 9949c28 6
* 06ed4d5 5
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何删除除最后五个之外的所有 Git 提交 的相关文章

随机推荐

  • 哪个是好的开源用户管理系统? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 将 UIView 中的位置转换为 SKScene

    我想在 UIView 中使用 touchBegan 功能 并且应该触发 SKScene 方法 一切都几乎正常 除了我的 SKNode 的起始位置与 UIView 中的触摸不同之外 我在这里读到 Swift 中令人困惑的反向触摸事件 http
  • 查找 3 个输入的最大值 VBA

    我正在尝试找到最多 3 个输入 问题不在于算法 因为当我在 python 中制作相同的脚本时 它工作得很好 问题是它没有按预期工作 我将写一些场景以及结果 8 5 12 最多 125 8 12 最多 1212 5 8 最多 812 8 5
  • 用于选择首选糖果的高效 SQL 2000 查询

    我希望我能想出一个更具描述性的标题 如果您能说出我要询问的查询类型 请建议一个或编辑这篇文章 数据库 SQL Server 2000 示例数据 假设 500 000 行 Name Candy PreferenceFactor Jim Cho
  • 获取 XPath 中标签后面的文本

    我正在尝试使用 Selenium 进行一些测试 但遇到了一些问题 假设我有以下内容 div class itemize row p class subText span class item label Card Color span Ma
  • Action 到子动作的链接

    我已经调用了另一个视图Html Action方法 当用户单击操作链接时 我想在子视图内使用参数调用相同的操作 当我编写此代码时 我收到此错误消息 Html ActionLink link Configure new id 2 配置 操作只能
  • Cron 不将参数传递给 PHP 脚本

    我有一个 cron 作业集 例如 php home novinarb public html index php uri cron 24satahr 但 uri 参数根本没有到达 php 脚本 我也尝试过在 uri 前面没有 但仍然没有 有
  • Swing:JTable 结构更改后 JScrollPane 不刷新

    我有一个 JTable 与 DefaultTableModel 关联 位于 JPanel 中 SpringLayout 位于 JScrollPane 中 当我使用下面的方法修改 DefaultTableModel 的结构时 JTable 会
  • Hibernate createNativeQuery 返回 Clob 的代理对象

    我被迫陷入使用 hibernate createNativeQuery 返回对象数组列表的情况 我的查询返回值的 许多 列之一是 CLOB 返回的对象是 com sun Proxy 对象 我看到一个问题here https stackove
  • 如何通过XML在Spring bean中设置XmlAdapters的Jaxb2Marshaller列表?

    我正在尝试定义一个Jaxb2MarshallerSpring WS 中的 bean 使用扩展的自定义适配器XmlAdapter 我的 XML 文件中有以下内容
  • 文本聚类主题建模效率低下

    我尝试使用 LDA 进行文本聚类 但它没有给我不同的聚类 下面是我的代码 Import libraries from gensim import corpora models import pandas as pd from gensim
  • 什么是脚手架?它是特定平台的术语吗?

    脚手架 是什么 这是仅限 Rails 的东西吗 脚手架通常是指快速设置应用程序的骨架 它不仅仅是 Rails 因为其他平台也有它 它通常也不意味着是一个 最终 系统 只是第一个 最小的方法
  • 在 Python 中使用 Re 删除双空格/制表符组合

    我想使用 Re 模块将 Python 中存在连续制表符和 或空格的所有实例替换为单个空格 我不想删除新行 这排除了 s 推荐 目前我有 formateed string re sub t formateed string formateed
  • 如何使用流获取嵌套集合中的所有元素

    我有一个包含不同嵌套集合的类 现在我想接收嵌套集合的所有元素 具体我想收集集合的所有 StrokePoints 我可以用 旧 java解决它 但如何用流来解决它 int strokesCounter 0 List
  • 名为“DefaultApi”的路由已在路由集合中

    这个问题可能看起来重复 但这略有不同 在所有其他问题中 我注意到他们注册了多条路线 但就我而言 我只有一条路线 我正在创建 asp net webapi framework 4 5 并且在 RegisterRoutes 方法中只有一条路由
  • 在本地找不到元数据

    在本地机器上 我安装了一个带有 Maven 存储库的 Artifactory 并且我的项目有一个非常简单的 pom 文件 它指向它
  • 在安全的 Android 锁屏中使用 FLAG_SHOW_WHEN_LOCKED 和 disableKeyguard()

    上下文 最近 我一直在寻找可靠的方法来控制安全的 Android Keyguard 主要是显示自定义锁屏 我知道谷歌已经声明自定义锁屏不受该平台的正式支持 并且应该预料到事情会被破坏 但是 利用现有的 API 我相信一定有办法做到这一点 我
  • Linux 下 C 语言的公钥实现

    我正在尝试使用公钥加密来签名并稍后验证文件 该文件是一个简单的纯文本文件 其中包含用于创作目的的用户信息 我尝试了不同的站点来实现公钥加密算法的 C 实现 但我没有找到任何东西 许多网站都指出使用证书 x 509 等 但这远远超出了我的需要
  • 如何使用带有变量表名称和条件的立即执行

    我想创建一个 PL SQL 函数 该函数传递一个表名和一个条件 并返回该表上满足条件的行数 我创建了这个函数 CREATE OR REPLACE FUNCTION CHECK EXISTS TABLE NAME VARCHAR2 CONDI
  • 如何删除除最后五个之外的所有 Git 提交

    我有一个非常大的 Git 存储库 其中仅包含经常更改的二进制文件 当然 Git 存储库是much比其中的实际文件大 我并不真正关心旧的历史记录 我只需要一些较新的历史记录就能够恢复一些错误的更改 假设我想删除除最后五个之外的所有提交 当然