重写整个 git 历史记录

2024-03-27

很久以前,我在 github 上分叉了一个 repo,并对几个不相关的功能做了相当多的更改,当时我对 git 基本上一无所知,所以我的提交基本上只是“自上次以来我碰巧做过的事情”我记得提交的时间是”。我想向上游贡献一些更改,但在我的存储库当前状态下这是不可能的。现在我实际上已经使用 git 足够长的时间来适应它,并且更加了解良好的实践,是否可以重写我的整个提交历史记录,以分解少量的大型提交,每个提交都包含许多不相关的更改,分成更小的单独提交,仅包含相关更改?如果没有别的事,我可以删除 Github 上的分叉,重新分叉,用我当前的本地副本覆盖所有内容并运行一堆部分提交,但如果有更好的方法那就太好了。


是的,可以重写整个历史......但对于您的情况,您不必这样做。您只需要重写您所处理的部分即可。这可能只是您的更改master分支。为此,您可以对之间的所有更改进行交互式变基master and origin/master这就是他们的上游。

要做到这一点,首先结帐主,然后git rebase -i origin/master。这会将您带入一个编辑器,您可以在其中选择对每次提交执行的操作。您可能想要编辑它们(e)。保存文件后,Git 将依次检出每个更改,您可以使用它执行您喜欢的操作。

如果您想拆分提交,请使用git add -p and git add -i https://git-scm.com/book/en/v2/Git-Tools-Interactive-Staging将更改一次添加到暂存区域,然后git commit仅提交更改的一部分。

欲了解更多详细信息,请阅读在 Pro Git 中重写历史 https://git-scm.com/book/en/v2/Git-Tools-Rewriting-History和 Github 的关于 Git 变基 https://help.github.com/articles/about-git-rebase/.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重写整个 git 历史记录 的相关文章

  • 无法使用 File delete() 方法删除 git repo 中的 .pack 文件

    对于我正在编写的这个方法 我使用 jgit 库克隆一个 git 存储库 然后对这些文件执行一些操作 最后我想删除该存储库 我遇到的问题是 当我在 pack 文件 位于 git objects pack 中 上调用 delete 方法时 它无
  • 如何在保留历史记录的同时将 git 存储库重新设置为父文件夹?

    我有一个 git 仓库 foo bar baz具有大量的提交历史和多个分支 我现在想要 foo qux位于同一个仓库中 foo bar baz 这意味着我需要它们都位于植根于的存储库中 foo 但是 我想保留我所做的更改的历史记录 foo
  • 如何从“git log”中查看 Git 中的特定版本?

    My git log显示为 enter code here git trial git log commit 4c5bc66ae50780cf8dcaf032da98422aea6e2cf7 Author king lt email pro
  • 子 git 存储库作为主存储库的子集

    我正在寻找一种方法来设置 git 存储库 其中包括来自较大存储库的文件子集 并从该主存储库继承历史记录 我的主要动机是能够通过 GitHub 共享代码子集 我目前通过单个 git 存储库管理我的研究相关 主要是 Matlab 代码 代码本身
  • 忽略提交之间 git-diff 的*所有*空白更改

    我正在检查代码库并修复空白奇怪之处并通常纠正缩进等事情 并且我想确保我没有无意中进行任何其他更改 所以我正在做git diff w显示所有已更改文件中的差异 同时忽略空白差异 问题是这实际上并没有忽略all空白差异 至少是什么I认为仅仅是空
  • GitHub 未显示存储库中使用的语言

    我在 GitHub 上上传了 java 的 android studio 项目 但它没有显示语言部分 如何添加语言部分 为什么 GitHub 无法检测存储库中使用的语言 存储库链接 https github com QAZIMAAZARSH
  • Git - 包含来自其他存储库的文件

    对于 Git 我想包含一些常见的 JS CSS 库和 或实用方法 即来自另一个存储库的特定文件 在我的项目中 我希望它们始终是最新的 我真的不想要整个远程存储库 如果我可以处理远程文件的 本地副本 并将更改推送回来 那就太好了 一个有点类似
  • Git 版本控制中忽略父目录

    如何忽略父目录 gitignore 我尝试了这种模式 但似乎它们不起作用 如果您想忽略某个文件夹但不想修改现有的 gitignore 请将 gitignore 放入仅包含星号的文件夹中 下面是一个快速的 BASH 示例 用于完成 idea
  • 我有*很多*源文件要添加到 git 存储库,如何使其快速

    我在看here https git scm com docs git fast import寻找更快地将批量文件导入 git 存储库的灵感 但不确定是不是这样 基本上情况是 我有超过 1 亿个文件想要提交到 git 存储库 我已将它们分解为
  • Git:当文件位于嵌套 git 存储库中时强制“添加”

    我想添加一个包含在父存储库中的嵌套 git 存储库中的文件 我正在开发一个在我的项目中使用的库 然而git add nested repo myfile不做任何事情 我可以尝试重命名 git文件在进行提交时 但是当我重命名回时 我担心会出现
  • 如何为新的 eclipse (neon) java 项目初始化 git

    我安装了 eclipse Neon 的新副本 并在一个新的闪亮工作区中创建了一个新的 gradle java 项目 将 git 添加到聚会中的最佳实践是什么 我读到在项目目录中初始化 git 是真是个坏主意 https stackoverf
  • 合并git中2个不同分支中具有相同名称的2个文件

    我目前有一个名为test1在一个名为branch1创建自master另一个文件也命名为test1在一个名为branch2也创建自master 如果我合并 master 中的两个分支 这两个文件中编写的代码会发生什么 As 阿米尔回答了 ht
  • 如何在 Angular 模板中嵌入 GitHub gist?

    角度忽略script其模板中包含标签 但加载 GitHub gist 需要它们 执行此操作的最佳做 法是什么 使用iframe 创造script动态标记 或者是其他东西 一种方法是创建一个iframe with script里面并在你希望你
  • 如何在 git diff 中按标点符号拆分单词?

    我对以下命令有一些运气 git diff color words lt gt space lt gt 但它似乎没有在第一个字符类中正确地否定方括号 我试过这个 git diff color words lt gt space lt gt 为
  • git分支和标签如何存储在磁盘中?

    我最近检查了我工作中的一个 git 存储库 其中有 10 000 多个分支和 30000 多个标签 新克隆后 存储库的总大小为 12Gigs 我确信没有理由拥有 10000 个分支机构 所以我相信它们会占用磁盘中相当大的空间 所以 我的问题
  • GIT 中的重复合并。它如何计算差异?

    我一直在做一项研究 试图了解 GIT 合并是如何工作的 我知道有几种合并类型 如递归 章鱼等 我发现解析 递归是最常用的 并且递归合并仅在存在多个共同祖先 基础时才有用 但是 我找不到从分支重复合并到主节点时使用哪种算法 或者如何计算祖先
  • 从分离的头进行 Git 推送

    我以超然的态度做出了一些改变 我想用 Git 将这些更改推送到这个独立的头 我不希望我的更改进入开发分支 当然也不想进入主分支 我正在与另一个人一起处理一个文件 分支示例 develop master HEAD detached at or
  • 命令来确定当前 HEAD 的上游引用?

    我正在寻找我所希望的简单的一行命令确定当前签出分支的正确上游引用 本质上就像是 git branch remote HEAD 如果有效 会将符号模式 HEAD 转换为当前分支名称 然后选项 remote然后将其更改为远程跟踪分支的引用 但它
  • 如果文件已在服务器上,请避免使用 git-ftp 上传

    假设我有应用程序的本地副本 我将其推送到 github 然后使用 git ftp 将任何更改上传到我的服务器 我首先会使用 git ftp init u
  • Git 中的专有+开源设置? (例如铬/铬)

    您将如何设置一个拥有专有版本和开源版本 例如 Chrome 和 Chromium 的代码存储库 对于 Git 您会使用两个分支还是两个存储库 您如何使 私有 版本与开源版本保持同步 如果是我 我会有两个存储库 这样 您就可以对每个版本拥有不

随机推荐

  • Spark SQL 和时区 - 如何将 unix 时间戳转换为本地化时间戳

    我需要从 Spark DataFrame 将 epoch unix 时间戳列 例如 1509102527 GMT 星期五 2017 年 10 月 27 日 11 08 47 转换为本地化时间戳 以便获取特定时区的本地小时 是否有 Spark
  • Unix 上具有多个读取器的命名管道 (FIFO)

    我有两个程序 Writer 和 Reader 我有一个从写入器到读取器的 FIFO 因此当我向写入器中的标准输入写入内容时 它会从读取器打印到标准输出 我尝试在打开两个 Reader 的情况下执行此操作 并且仅从两个 Reader 程序之一
  • 更改通知标题的颜色 (Android)

    这是我的代码 一切正常 val builder NotificationCompat Builder this NOTI ID setSmallIcon R drawable ic stat name setContentTitle My
  • 双击标题栏时如何知道窗口是否最小化?

    This image is from SystemPreferences gt Appearance 我想知道如何以编程方式获取该值 我问这个问题是因为我正在绘制一个带有自定义标题栏的窗口 并且我希望它 在行为上 尽可能类似于普通 非自定义
  • 如何进行网站容量规划? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我刚读完书容量规划的艺术 https rads stackoverflow com amzn click com 0596518579 顺便说一句 我
  • 使用 OpenCV 将图像文档转换为黑白

    我是 OpenCV 和图像处理的新手 我不知道如何解决我的问题 我有一张用 iPhone 制作的文档照片 我想将该文档转换为黑白 我尝试使用阈值 但文本不太好 有点模糊且难以阅读 我希望文本看起来与原始图像相同 只有黑色 背景为白色 我能做
  • Azure 表存储 - 可能不存在的列上的 where 子句

    我正在向我的天蓝色表添加一个新列 例如 该表称为 User 新列称为 ComputationDate User 表已存在 其中的行没有此新列 ComputationDate 我对此有一个疑问 如下 var usersDue from use
  • FastAPI 中的返回值[重复]

    这个问题在这里已经有答案了 我试图在 FastAPI 中返回 matplotlib figure Figure 如果我像图像一样保存它 它就可以工作 代码在这里 router get graph id file name Return th
  • SQL SMO 执行批处理 TSQL 脚本

    我正在使用 SMO 执行批处理 SQL 脚本 在 Management Studio 中 该脚本的执行时间约为 2 秒 使用以下代码 大约需要 15 秒 var connectionString GetConnectionString ne
  • 非标准网址格式

    我们在应用程序中向客户发送了邮件 其中有一个链接 在 yahoo 和 Hotmail 中 每当客户单击链接时 它都会显示以下警告 替代文本 http img691 imageshack us img691 5402 warningp jpg
  • Twitter Bootstrap 下拉链接不起作用

    我正在使用引导程序版本2 0 我有以下 html 结构 现在当我点击Filter by Team下拉菜单正确显示 现在 当我点击链接时 我应该被带到该页面 但链接确实not工作 我的意思是 当我单击下拉元素时 它们应该将我带到一个 URL
  • 使用 JS 检查 HTML5

    我有一个页面包含一些 JS 来更新浏览器历史记录 pushState 使用 HTML5 由于 IE8 不支持 HTML5 用户会被告知该页面包含错误 虽然这并没有削弱页面的功能 但它看起来不太专业 所以我想知道在运行此代码之前是否检查用户浏
  • Chrome 在下载的文件中添加“-, 附件”

    我使用 Symfony2 框架并使用以下代码导出 xml 文件 response gt setStatusCode 200 response gt headers gt set Content Type application xml re
  • MSIL 源代码的编译器位于 .NET Framework 中的什么位置?

    我有一个关于 NET Framework 的问题 MSIL 源代码的编译器驻留在哪里 是在 CLR 本身还是任何其他层 另外 请给我提供有关 NET Framework 的非常小 但足够 的插图 这是一个快速流程图 未遵循的符号 可以澄清大
  • 获取退出代码 - Go

    我正在使用的包 os exechttp golang org pkg os exec http golang org pkg os exec 在操作系统中执行命令 但我似乎找不到获取退出代码的方法 我可以读取输出 ie package ma
  • 如何在类之间传递对象

    所以我在这里想做的是传递一个类的相同副本 class A 到另一个班级 class B but class B实例化于class A Using a new中的声明class B不起作用 因为当我希望能够使用第一个实例中的变量时 它会导致无
  • 如何在 ubuntu 中使用 python 将原始字符串发送到点阵打印机?

    我有一台点阵打印机 LX 300 通过网络连接到我的计算机 如何在 Python 中将带有 ESCP 字符的原始字符串直接发送到打印机 该计算机通过另一台计算机连接到打印机 我需要发送原始字符串 因为 LX 300 图像打印结果模糊 问题
  • 如何在 Spring.Net 中配置 NULL 对象

    在我正在工作的特定项目中 有一个空日志服务对象是合适的 由于这是在 Spring Net 中配置的 因此如何将 spring net 对象配置为 null 这就是我想做的 是否可以
  • 如何使用 axios 下载包含多种类型文件的 zip

    在我的 vueJs 应用程序中 我有以下 axios POST api 调用 该调用应该返回我希望保存在 zip 文件夹中的多个文件 但是 当我使用以下 axios 方法时 我无法打开我的 zip 并且出现错误 提示 myfolder zi
  • 重写整个 git 历史记录

    很久以前 我在 github 上分叉了一个 repo 并对几个不相关的功能做了相当多的更改 当时我对 git 基本上一无所知 所以我的提交基本上只是 自上次以来我碰巧做过的事情 我记得提交的时间是 我想向上游贡献一些更改 但在我的存储库当前