如何将 git-replace 推送到远程仓库?

2023-11-27

我使用“git Replace”来替换分支(没有共同祖先)22b2b25 来替换 master 中的提交。我希望这种改变是永久性的。我对以前的历史不感兴趣。在下面的输出中,前 5 个提交来自原始 master 分支,后 2 个来自不同的分支。

当我将其推送到新存储库时,git-replace 丢失了,旧的历史记录又出现了。有没有办法让这种改变永久存在?

分支主控在原始存储库中如下所示。我想在远程存储库和后续克隆中看到这一点。

[mike@localhost canal_site]$ git log --oneline --decorate
cdf0ae3 (HEAD, origin/master, master) MM: sqlencode course name for ad-hoc courses
2b57df5 MM: fixes for changes so far
7916eaf MM: ad hoc - more refactoring
1e00d22 MM: reformatted code
e36cee1 factored out equal ops
22b2b25 (origin/prod20140313, prod20140313) initial load from production 9-June-2015
08379cd initial inclusion of production files from 9-June-2015

git replace单独是不够的:替换一个提交是不够的。

下一个提交现在必须引用替换的提交作为父级。

正如《从 git 中删除一大堆提交":

通过 git clone 备份您的存储库。
在您不喜欢的提交之后找出您喜欢的第一个提交并记住其直接祖先的哈希值(在下面bbb).
然后在您不喜欢的提交之前找到您喜欢的第一个提交(在下面的内容中)aaa):

git replace bbb aaa

查看您的存储库(使用git log)并检查在您想要的更改后一切是否都正常。
但是replace命令只是添加一些元信息到.git/refs/replace,其中 git 命令会相应解释。
为了使这些更改永久生效,您可以使用git filter-branch:

git filter-branch -- --all

然后,您需要强制推送(git push --force),以便使用分支的新历史记录覆盖远程存储库。或者你只是推送到一个新的空的裸仓库。


更新(灵感来自Stephen的评论)

正如我在 2019 年 10 月的《可能破坏/重写历史的 Git 命令"、git filter-branch 或 BFG 已过时。
git filter-repo使用更方便,效率更高。

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

如何将 git-replace 推送到远程仓库? 的相关文章

  • 获得干净的 git 沙箱的最有效方法是什么?

    对于我的持续集成构建 我想确保我的 git 沙箱中没有存放任何杂散文件 并且没有任何文件被无意中更改 我知道关于git reset hard HEAD 这解决了部分问题 但我想我想做的是删除所有未跟踪和忽略的文件 我可以用蛮力的方式做到这一
  • 运行 npm install - 如何配置不使用 SSH(端口被防火墙阻止)

    当我跑步时npm install大多数模块配置正确 然而 至少有人想击中ssh 拉取模块的地址 不幸的是 我的公司有一项政策 不允许内部网络之外的 SSH 连接 我收到的具体错误是 Error while executing npm ERR
  • ssh-keygen 找不到 ssh_askpass

    我正在尝试在 Windows 上为 Git 生成 SSH 密钥 我刚刚安装了 2 18 0 但它没有找到名为 ssh askpass 的东西 d src py gt ssh keygen b 4096 C email protected c
  • Heroku——从多台计算机部署?

    我有两台计算机 我希望它们都能够从 github 上的同一个存储库拉取 推送 并部署到 heroku 上的同一个应用程序 我知道 Heroku 允许您在另一台计算机上克隆其 git 存储库 以便它也可以链接起来 但我不希望第二台计算机克隆
  • 如何安装gitlab-rails?

    我正在尝试为 Gitlab 项目创建一个组访问令牌 它需要访问 gitlab rails 控制台才能执行此操作 在 gitlab 教程上 这是安装它的链接 https docs gitlab com ee administration op
  • 我可以通过 ssh 将 ssh 用户名与 git 的提交关联起来吗?

    我正在尝试通过 ssh 设置共享 git 存储库 将用户公钥复制到authorized keys 我真的希望 ssh key 中的 用户名 成为存储库中提交历史记录的一部分 这样用户 joe 就不能将他的名字设置为 kate 我们需要某种责
  • 通过标记现有提交来触发 Jenkins 管道

    描述 我设置了 Jenkins 2 126 以便在推送新标签时构建管道 具体来说 我想将现有提交标记为master as release 3并让它触发构建 根据多个消息来源 我想要的是可能的 https mohamicorp atlassi
  • git svn - cygwin下的错误

    我有 cygwin 和 git 我正在尝试使用 git 提交到 svn git svn dcommit 但它失败并出现奇怪的错误 git svn dcommit 4 main perl 5536 C cygwin bin perl exe
  • 如何 git reset --hard 子目录

    UPDATE 在 Git 2 23 2019 年 8 月 中 有一个新命令git restore这样做的 请参阅接受的答案 https stackoverflow com a 15404733 946850 UPDATE 从 Git 1 8
  • git:每日更新日志

    如何生成按日期分组的提交变更日志 格式为 date today commit message1 commit message2 commit message3 date day 3 commit message1 commit messag
  • SSL_connect:SSL_ERROR_SYSCALL 连接到 github.com:443

    几天后 我遇到了 Mac OS High Sierra 10 13 3 的问题 当我运行git clone like git clone github com xxx git failed它打印 LibreSSL SSL connect S
  • 具有共享代码库的多个产品的版本控制和发布管理

    我目前正在尝试弄清楚 在这样一种情况下 如何使用 git flow 进行发布管理 我有一个 git 存储库 其中包含两个解决方案中的大约 15 个项目以及数据库脚本 每个解决方案基本上都包含一个将生成可执行文件的项目和 10 多个包含两个解
  • Git - 如何列出两次之间主分支上更改的所有文件? [复制]

    这个问题在这里已经有答案了 我想找出两个日期之间在主分支 或与此相关的任何一个分支 上修改的所有文件 我明白了 从这篇文章 如何仅列出两次提交之间更改的文件名 https stackoverflow com questions 155234
  • 使用 git-svn 和 github 跟踪上游 svn 更改?

    如何使用 git svn 和 github 跟踪上游 SVN 更改 我使用 git svn 将 SVN 存储库转换为 github 上的 git git svn clone s http svn osqa net svnroot osqa
  • 显示按日期排序的 git 标签

    如何列出git标签按时间顺序排列 首先是最近的标签 git tag只显示字母顺序 正确答案是 git tag sort taggerdate taggerdate是适当的字段 根据git 标签手册页 https git scm com do
  • github权限错误(ssh密钥无法识别)

    从另一个 本地 存储库推送到 github 帐户后 我似乎失去了对它的权限 我现在收到以下错误 git push Permission denied publickey fatal The remote end hung up unexpe
  • 复制 git 存储库及其 GIT-LFS 设置

    我已将一个存储库复制到一个较新的存储库中 但是当在新存储库上执行 git 克隆时 它无法使用 LFS 指针下载文件 并且在使用 smudge 时出现错误 例如 下载对象时出错 在服务器上找不到对象 Steps git clone bare
  • 如何应用 git 补丁,就像作者承诺我的存储库一样?

    假设有一个中央存储库 来自卫星的提交会被推送一段时间 开发人员 A 在他的存储库上做了一些提交 而 B 也自己做了一些提交 现在 A 希望将 B 的一项提交合并到他的存储库中 他无法直接访问并拉取 一种方法是让 B 创建补丁并将其发送给 A
  • 从 git 安装时,我可以强制 pip 进行浅表签出吗?

    以下命令从 git 存储库安装 Python 包 pip install git ssh email protected cdn cgi l email protection username repo git Collecting git
  • 在 Mac 上缓存用于 git 签名的 GPG 密码

    关于这个主题已经有一个更通用的线程 签署 git 提交时记住 GPG 密码 https stackoverflow com questions 36847431 remember gpg password when signing git

随机推荐

  • 在 F# 中将列表拆分为两个相等的列表

    我对 F 确实很陌生 我需要一些关于 F 问题的帮助 我需要实现一个剪切函数 将列表分成两半 以便输出 切 1 2 3 4 5 6 val it int 列表 int 列表 1 2 3 4 5 6 我可以假设列表的长度是偶数 我还希望定义一
  • AutoMapper 如何根据上下文以不同方式将对象 A 映射到对象 B

    呼叫所有 AutoMapper 专家 我希望能够根据运行时的上下文以不同的方式将对象 A 映射到对象 B 特别是 我想忽略一种映射情况下的某些属性 并在另一种情况下映射所有属性 我遇到的是 Mapper CreateMap 可以在不同的映射
  • 是否可以关闭特定更新的休眠版本增量?

    是否可以使用休眠更新数据库中的实体而不修改实体的版本 使用我的 Web 应用程序 用户可以创建或更新实体 在任何用户操作之后 处理 这些实体的另一个异步进程在哪里 如果用户在实体 处理 之前打开实体进行更新 但在 处理 之后尝试保存实体 则
  • 在构建期间自动化 xsd.exe

    我需要一种在构建期间基于 xsd 文件自动重新生成 cs 文件的方法 最好不涉及任何自定义加载项 这也需要在 CI 构建上运行 我不确定我是否遗漏了一些明显的东西 或者这在我看来真的很棘手吗 我使用这个脚本 echo off cd 1 ca
  • 从 Typescript 中的 http url 导入 ES6 模块

    我正在编写一个 ES6 模块 它依赖于使用 http url 指定的其他 ES6 模块 如下所示 import el mount from https cdnjs cloudflare com ajax libs redom 3 26 0
  • 将闭合曲线拟合到一组点

    我有一组点pts形成一个循环 看起来像这样 这有点类似于31243002 但我不想将点放在点对之间 而是想通过点拟合一条平滑的曲线 坐标在问题末尾给出 所以我尝试了类似的方法scipy文档关于插值法 values pts tck inter
  • Sklearn - 如何预测所有目标标签的概率

    我有一个包含目标变量的数据集 可以有 7 个不同的标签 我的训练集中的每个样本只有一个目标变量标签 对于每个样本 我想计算每个目标标签的概率 所以我的预测将由每行 7 个概率组成 在sklearn网站上我读到了有关多标签分类的内容 但这似乎
  • Windows 应用商店 - 拉伸图标

    我在 Windows 商店中遇到了一个小问题 我已在提交中上传了所有必需的图形 并且该应用程序具有所有必需的图形 包括框和平铺图像 然而 在商店中 应用程序入口使用的是宽图像 问题是它使用的宽图像实际上是一个被拉伸的框图像 有什么想法出了什
  • 使用 .NET SDK 按路径获取 Microsoft Graph Drive 项目

    因为它是有记录的 使用 Microsoft Graph REST API 您可以 以及其他选项 通过 ID 或路径获取项目 这工作正常 正如预期的那样 GET me drive items item id children GET me d
  • WPF:禁用列表框,但启用滚动

    整个早上我都在用头撞这个问题 基本上 我有一个列表框 我希望防止人们在长时间运行的过程中更改选择 但允许他们仍然滚动 解决方案 所有的答案都很好 我选择了吞咽鼠标事件 因为这是最直接的 我将 PreviewMouseDown 和 Previ
  • 加载 pandas 数据帧,其块大小由列变量确定

    如果我有一个太大而无法用 pandas 加载到内存中的 csv 文件 在本例中为 35gb 我知道可以使用 chunksize 分块处理该文件 但是我想知道是否可以根据列中的值更改块大小 我有一个 ID 列 然后每个 ID 都有几行包含信息
  • Twisted:等待子任务完成

    在我的代码中 我有两个假设的任务 一个从生成器获取 url 并使用 Twisted 的 Cooperator 批量下载它们 另一个获取下载的源并异步解析它 我试图将所有获取和解析任务封装到一个 Deferred 对象中 该对象在下载所有页面
  • 从 Django 直接输入数据以生成 D3 图

    似乎所有 D3 示例图都采用外部 csv 或 tsv 文件作为输入数据 有没有办法修改代码以从 Django 中的变量获取数据 假设 data 是 JSON 格式 如何在图表中实现它 例如http bl ocks org 3885304 o
  • 某些应用程序如何阻止/替换平视通知?

    背景 自从 Android 上出现平视通知以来 有些人喜欢它的快速处理 但有些人讨厌它显示在应用程序 尤其是游戏 顶部 为了显示抬头通知 开发人员可以使用类似的东西 final NotificationCompat Builder buil
  • 为什么没有 std::move_if 算法?

    我在互联网上看到过一些地方 他们描述了使用std copy if with std make move iterator 但如果迭代器是前向迭代器 则会导致有效但未指定的 VBU 对象分散在源容器周围 拥有一个不是更好吗std move i
  • 如何在asp.net c# 中统计网站的访问者数量

    如何统计asp net c 网站的访问者数量 我正在使用下面的代码 在 global asax 页面中 void Application Start object sender EventArgs e Code that runs on a
  • Array.Find 和 IndexOf 用于查找完全相同对象的多个元素

    我无法获取完全相同对象的多个元素的当前元素的索引 b A D B D C E D F b contains D 替代版本 b A D B D C E D F Array FindAll b Predicate String args 0 c
  • BPMS 还是只是简单的编程?

    在实现业务流程时 您更喜欢什么 从开发人员的角度来看 业务流程管理系统 BPMS 还是您最喜欢的带有所需工具和框架 例如报告工具 的 IDE 从您的角度来看 与具有您个人工具和框架的 IDE 相比 BPMS 的最大好处是什么 好的 也许我应
  • Python Pandas,应用函数

    我正在尝试使用 apply 来避免iterrows 函数中的迭代器 然而 pandas 方法的记录很少 我找不到如何使用它的示例 除了蹩脚的 apply sq rt 在文档中 没有关于如何使用参数等的示例 不管怎样 这里有一个关于我尝试做的
  • 如何将 git-replace 推送到远程仓库?

    我使用 git Replace 来替换分支 没有共同祖先 22b2b25 来替换 master 中的提交 我希望这种改变是永久性的 我对以前的历史不感兴趣 在下面的输出中 前 5 个提交来自原始 master 分支 后 2 个来自不同的分支