git:更好的 git 恢复方法,无需额外恢复提交

2023-12-27

我在远程+本地分支中有一个提交,我想将该提交从历史记录中删除,并将其中一些放入自己的分支中。

基本上,现在我有:

           D---E---F---G master

而且我要:

             E---G topic
            /
           D master

这应该在我的本地和(只有一个,称为 origin)远程存储库中。

哪种方法最干净?

此外,还有其他人克隆了该存储库并检查了主分支。如果我在远程存储库中进行这样的更改,“git pull”是否可以让它们达到相同的状态?


如果您已经发表了,那么您不想重写历史是对的master。您想要的是向 master 发布一个提交,使其恢复到原来的状态D同时保留其当前历史记录,以便其他用户可以轻松合并或重新调整他们的工作。

如果您计划在未来某个时候合并topic into master那么你可能还想做的是在之间建立一个新的共同基础master and topic,这样当您随后合并时topic,您不会丢失已恢复的提交master。最简单的方法是在重置的“撤消”提交之上进行“重做”提交master回到原来的状态并建立新的基础topic其上有分支。

# checkout master branch (currently at G)
git checkout master

# Reset the index to how we want master to look like
git reset D

# Move the branch pointer back to where it should be, leaving the index
# looking like D
git reset --soft HEAD@{1}

# Make a commit (D') for the head of the master branch
git commit -m "Temporarily revert E, F and G"

# Create the new topic branch based on master.
# We're going to make it on top of master and the 'undo'
# commit to ensure that subsequent merges of master->topic
# or topic->master don't merge in the undo.
git checkout -b topic

# Revert the undo commit, making a redo commit (G').
git revert HEAD

作为替代方案,您可以提交 E'、F' 和 G' 分别重做每个部分,但由于 E、F 和 G 已经在您发布的历史记录中,如果您只引用“撤消”提交并说:提交正在被撤消。这是什么git revert无论如何。

基本上你所知道的就是这个。

D -- E -- F -- G -- D'      <-- master
                     \
                      \
                        G'  <-- topic

重要的是,您没有重写历史记录,并且主题基于 master,因此合并不会意外应用任何“撤消”提交。您现在可以安全地推送两者master and topic到您的远程存储库。

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

git:更好的 git 恢复方法,无需额外恢复提交 的相关文章

  • 有没有办法列出Git中未修改的文件?

    我从另一个来源以 tarball 的形式获取了一些更改 我想知道哪些文件没有更改 目标是 Git 克隆 因此可以轻松查看新增内容和更改内容 有人知道如何获取未更改内容的列表 不包括未跟踪的内容 吗 编辑 换句话说 我希望利用 Git 来查找
  • 使用 Git 的 Spring Cloud 配置服务器 - 无法克隆或签出存储库连接超时

    我正在使用 GIT 在 Spring Cloud Config Server 上进行 POC Spring Boot 1 5 3 RELEASE 爪哇1 8 弹簧工具套件https github com kishornpatil https
  • 从 git 中删除历史记录 - git 命令失败

    我正在尝试从 Git 历史记录中清除项目 bin 目录 我已经将 bin 添加到 gitignore 并运行 git rm cached r bin成功地 现在我尝试使用 GitHub 帮助页面中推荐的命令来清除历史记录 git filte
  • 是否存在比 SVN 更快的集中版本控制?

    我已经使用 SVN 很长时间了 现在我们正在尝试使用 Git 我在这里谈论的不是中心化 去中心化的争论 我唯一关心的是速度 后一个工具要快得多 但有时 我需要使用一种集中式方法 这种方法比分散式方法更简单 更简单 学习曲线非常快 这节省了大
  • Git:结帐而不运行结帐后挂钩

    我有一个我喜欢的结帐后挂钩 大多数时候 但有时我知道运行它会浪费时间 或者 因为它会删除并重建我的开发数据库 所以我不希望它去做它的事情 有没有跳过钩子的 git 选项 公平地说 我已经开始寻找一个了 我认为没有命令行选项可以完成您想要的操
  • 如何预览 Git 中的隐藏内容?

    我想检查一个存储 并找出如果我将其应用于当前状态的工作树 它会发生什么变化 我知道我可以对存储进行 git diff 但这向我展示了工作树和存储之间的所有差异 而我只是想知道存储应用将改变什么 git stash show将向您显示最近存储
  • Gerrit 安装后无法克隆所有项目存储库

    我有一个新设置的 Gerrit 实例 目前只有两个存储库 所有项目 binutils 测试 尝试克隆所有项目时 我收到以下错误 git clone ssh user hostname 29418 All Projects Initializ
  • Git:如何使外部存储库和嵌入式存储库作为通用/独立存储库工作?

    我有一个大项目 比方说A repo 其中有一个子文件夹来自B repo 当我提交时 我会遇到如下警告A repo warning adding embedded git repository extractor annotator serv
  • Git 命令显示我对给定远程的权限

    同事可以从远程存储库获取数据 但不能推送到远程存储库 我怀疑他对遥控器只有读权限而没有写权限 我可以通过多种方法来检查这一点 但我想不出他可以在 git 中使用的方法 是否有 git 命令可以显示给定远程存储库的权限 No Git 本身不处
  • 节点项目的 Azure git 部署失败

    我正在尝试将我的项目部署到azure 它正在失败 这些是我采取的步骤 git init git config core longpaths true git add git commit m initial commit 所有这些都有效 我
  • Windows 版 GitKraken 中的文件名太长

    正如建议的Q22575737 https stackoverflow com a 22575737 6623589 我已经更新了我的注册表并设置了git config system core longpaths true在处理长路径时 问题
  • 如何使用 .gitattributes 避免在 git root 中包含文件夹,但在 zip 的 dist 文件夹中包含同名文件夹

    我有一个名为lib在存储库的根目录和另一个名为lib在 dist 文件夹中 我正在尝试使用 gitattributes文件排除除 dist 之外的所有文件夹和文件 以便任何下载为 zip 或 tarball 的人都只会 git 分发文件 我
  • 使用 TFS 个人访问令牌克隆 Git 存储库

    我正在尝试以编程方式克隆 git 存储库 我的 ASP NET MVC 应用程序正在创建并启动一个进程 处理进程的代码工作正常 但是当尝试使用本地 TFS PAT 克隆 git 存储库时 身份验证失败 我无法使用 NTLM 或要求用户输入凭
  • 相当于“svn update -r”的 git 是什么?

    我是最近的 git 转换者 能够使用 git svn 将我的分支保留在本地而不干扰 svn 服务器真是太棒了 最新版本的代码中存在一个错误 我想确定一个它起作用的时间 以便我可以使用 git bisect 我找不到正确的命令来及时返回 谢谢
  • SSH 到 Openshift 服务器失败

    我正在 openshift 服务器上使用 jboss catridge 我希望与其他人共享此实例并添加其他用户的公钥 id rsa pub 当其他人尝试访问该实例时 他会收到以下错误 我在他的实例中尝试了同样的方法 但看到了同样的错误 与
  • 如何使用交互式变基将提交编辑为未提交?

    我想使用交互式变基来编辑以前的提交 但是当我进入该提交的编辑模式时 所有文件都已提交 我知道我可以进行更改并修改提交 但我希望所有更改最初都未提交 暂存或以其他方式 这样我就可以对其进行编辑 就像在最初提交之前一样 这可能吗 Imagine
  • git push heroku master 权限被拒绝

    我正在关注 ruby railstutorial 我运行命令 git push heroku master 它吐出了这个错误 Permission denied publickey fatal Could not read from rem
  • VS 2015 + Bower:在防火墙后面不起作用

    Problem 在 Visual Studio 2015 中 使用 Bower 我的包在防火墙后面时恢复失败 并出现类似以下内容的错误 ECMDERR 无法执行 git ls remote tags heads git github com
  • 使用终端时 Git 推送在总计后卡住了?

    我尝试将一些文件推送到Github 总大小只有22 2M 我不知道为什么它在总行之后卡住了 我读过推送到 Github 时 Git 推送挂起 https stackoverflow com questions 16906161 git pu
  • apt-get 无法在 ubuntu dockerfile 中工作

    我对 docker 相当陌生 正在尝试通过编写自己的镜像来学习 并且目前正在阅读 Docker 的实际操作 ISBN 1633430235 在我自己的代码和书中的示例 第 146 页 中 我想通过 dockerfile 安装 git My

随机推荐

  • 如何在 Django 中聚合单个查询集?

    简短的介绍 给定一个查询集myQueryset 我该如何选择max myfield 没有实际检索所有行并执行max在Python中 我能想到的最好的是max r myfield for r in myQueryset values myfi
  • CSS3中有没有办法为列指定不同的宽度?

    我想使用 CSS 来呈现两列布局 我正在使用的标记是这样的 div style margin left 20px margin top 20px div picture box div div name div div 有没有办法让一列的宽
  • 是否可以在越狱的ios上使用外部键盘模拟触摸事件?

    是否可以在 iOS 越狱以及越狱涉及的所有元素上模拟特定屏幕坐标中的触摸事件 按下物理外部键盘 通过相机连接套件或蓝牙的 USB 上的特定按键 我会用它来用脚按下应用程序中的按钮 幅度 我想使用键盘作为脚踏开关 仅供私人使用 没有应用商店或
  • 包含 if 和 .each() 的 jQuery 函数在 IE7 中非常慢

    我基本上搜索具有特定数据属性的元素 因此我循环遍历具有可能具有这些数据属性的类的所有元素 我使用 jQueryeach 函数进行循环 并且已经阅读并体验到 与其他常见浏览器 如 Firefox Chrome 或 Safari 相比 它在 I
  • 如何在没有显示器的情况下使用gui启动linux? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我遇到了一个问题 我有一台安装了redhat enterprise 5 5的服务器 该服务器上正在运行一个 Qt 程序 所以我应该做的是打开我的服务器
  • Android Marshmallow:如何避免无互联网接入时 Wi-Fi 掉线

    我有一台运行 MarshMallow 6 0 的 Nexus 5x 它与无法访问互联网的设备的 Wi Fi 关联 Android 不断断开连接 甚至在尝试几次后也不会自动重新连接 因为它检测到没有互联网访问 即使没有互联网接入 如何强制 A
  • 如何将 JavaScript 变量传递给 React 组件

    我对 React 有点陌生 在将一些变量从 Django 服务器传递到 React 组件时遇到一些问题 这是我所拥有的 服务器是 Django 我有一个 url mydomain com testview 它映射到views py函数tes
  • 如何从 SQL Server 数据库中获取以给定字符串开头的条目?

    我有一个数据库 其中有很多要在标签系统中使用的单词 我已经为自动完成框创建了必要的代码 但我不确定如何以最有效的方式从数据库中获取匹配的条目 我知道 LIKE 命令 但在我看来 它更像是 EQUAL 命令 我只得到与我输入的单词完全相同的单
  • 如何强制 Vaadin 客户端引擎重试向服务器发送请求?

    我目前正在试验 Vaadin Java 框架 我注意到客户端引擎不会重试向服务器发送请求 当移动互联网网络较弱或不一致时 最好继续重试发送请求而不是放弃 有谁知道如何在 Vaadin 实现这一目标 扩展 ApplicationConnect
  • 无法转换参数 C#/SQL Server

    出现错误 无法将参数值从字符串转换为 Int32 我为我的表单编写了该代码 最后运行该代码时出现错误 我试图改变一切 但任何交换都会给我同样的错误 My code const string sqlText INSERT INTO dbo b
  • 在GWT项目中继承外部java源

    我有一个在服务器端使用的 ENUM 我也希望能够在客户端 GWT 上使用这个枚举 这是结构 se mycompany core se mycompany core TheEnum lt this Enum se mycomapny web
  • 安装 Ionic2 应用程序所需的类型

    所以我正在研究 Ionice2 项目 这仍然是新项目 差不多一周了 并且我正在尝试按照下面的教程使用 PouchDB 进行 LocalStorage 教程 http gonehybrid com how to use pouchdb sql
  • UITableView、UIWebViews 和scrollsToTop 属性 = 麻烦

    我的应用程序有一个UITableView UITableView 有一个标题视图 它是UIWebView 默认情况下 滚动视图有其scrollsToTop属性设置为YES 这将使用户能够点击状态栏滚动到滚动视图的顶部 当一个视图中嵌入两个滚
  • 使用类类型向量进行前向声明 - 不允许指向不完整类类型的指针

    我有两节课 foo and bar foo h includes bar h 并包含一个std vector的指针bar对象 在运行时的某个时刻 bar必须访问这个指向其他指针的向量bar对象 所以 foo包含一个名为getBarObjec
  • 如何使用 System.Windows.Shapes.Path 绘制圆的一部分?

    我有一个 Silverlight 应用程序 通过实例化 System Windows Shapes Line 的实例然后将其添加到 MainCanvas Children 来在图片上绘制线条 我想同样添加一些圆段 如果我理解正确 我会想使用
  • PyTorch 自定义转发功能不适用于 DataParallel

    编辑 我尝试过 PyTorch 1 6 0 和 1 7 1 都给了我同样的错误 我有一个模型 允许用户轻松地在不同架构 A 和 B 之间切换 两种架构的前向函数也不同 所以我有以下模型类 附 我在这里只是用一个非常简单的例子来演示我的问题
  • 如何封装数据库访问?

    我正在 NET 中开发一个事务应用程序 希望获得一些有关如何正确封装数据库访问的信息 以便 我没有所有连接字符串 在那个地方 对同一个存储的多次调用 来自不同功能的过程 或者更糟糕的是 多个存储 程序不同 单列 我有兴趣知道使用像 NHib
  • python中的子串比较

    如果我有列表 PhoneDirectory 例如 John 009878788677 Jefrey 67654654645 Maria 8787677766 该函数可用于比较 List 中每个条目中是否存在子字符串 例如 Joh 我尝试过使
  • 卡夫卡生产者在第一条消息上速度很慢

    我在 NET 中有一个测试应用程序 它创建 kafka 生产者并使用 Confluence 客户端库向主题发送一些消息 由于某种原因 第一条消息的确认总是晚 1 秒到达 后续消息的确认几乎立即到达 这是正常行为还是我缺少某些配置 我想我尝试
  • git:更好的 git 恢复方法,无需额外恢复提交

    我在远程 本地分支中有一个提交 我想将该提交从历史记录中删除 并将其中一些放入自己的分支中 基本上 现在我有 D E F G master 而且我要 E G topic D master 这应该在我的本地和 只有一个 称为 origin 远