Git:合并和子模块

2024-01-23

假设我在 RepoX 中有两个分支,分别称为 Branch 和 Branch。 Repo 还有一个名为 Submodule 的子模块。

BranchA 具有修订版“abc”的子模块,Branch 具有修订版“def”的子模块 A。

假设我想将 BranchA 合并到 BranchB 中,但我想让 Branch 的子模块指向其原始版本“def”。我看到有几种方法可以做到这一点:

方法一:

  1. 结账分行。
  2. 将 SubmoduleY 移动到修订版“abc”以使实际合并变得轻松(我们现在不想在子模块级别进行任何合并)。
  3. 提交 SubmoduleY 的新修订版(我们不能让它浮动以进行合并)。
  4. 将分支合并到分支中。解决任何冲突。
  5. 将 SubmoduleY 移回修订版“def”。
  6. 提交 SubmoduleY 的新修订版。
  7. 将更改推送到主存储库。

方法二:

与方法 1 相同,但不执行步骤 6,而是变基并删除步骤 3 中额外的子模块提交。

两者似乎都有令人烦恼的缺点:

方法 1 将两个额外的提交放入历史记录中。

方法 2 会忘记与子模块修订有关的任何更改,因为这些提交已被删除。因此,以后的任何合并都必须再次处理一些问题。

有没有更好的办法?


您可以对方法 1 进行变体,但要进行引入子模块版本更改的提交(在步骤 6 中):--amend以便它更改合并提交中子模块的状态。换句话说,这将是:

$ git checkout b
$ git merge a
Merge made by recursive.
 example.txt |    1 +
 sY          |    2 +-
 2 files changed, 2 insertions(+), 1 deletions(-)
 create mode 100644 example.txt
$ cd sY
$ git checkout def
[... you get the "detached HEAD" warning ...]
$ cd ..
$ git add sY
$ git commit --amend

请注意,正如您在问题中所建议的那样,我并没有在合并之前尝试避免子模块处于不同版本。如果存在冲突,您可以选择将子模块添加到def来解决它。如果没有冲突,我上面提到的步骤应该可以正常工作。

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

Git:合并和子模块 的相关文章

  • 名称和电子邮件在 Git 的每用户配置文件中设置,但 Git 仍使用默认生成的名称和电子邮件

    标题已经说了 但我会更彻底地解释一下 我已使用以下命令按照建议配置了用户名和电子邮件 git config global user name git config global user email 我可以通过执行以下操作来验证这是设置的g
  • 警告:引用名称“xxx”不明确

    我想知道为什么我收到 refname is ambigeous 的警告 这是否意味着名称以该字符串开头的分支不超过两个 但这里没有 Thanks git checkout B03799 warning refname B03799 is a
  • 合并来自并行 Subversion 存储库的更新代码

    我想知道人们在将实时 持续更新的 SVN 存储库与离线存储库 更新频率较低 合并时通常会采取哪些步骤 以我的场景为例 不久前我下载了BugTracker NET系统 当时它的版本是3 2 3 随后我对我们业务的代码进行了一些增强 我们使用
  • 如何根据查找表匹配多列

    我有以下两个数据框 lookup lt data frame id c A B C price c 1 2 3 results lt data frame price 1 c 2 2 1 price 2 c 3 1 1 我现在想要浏览所有列
  • 如何从父克隆中过去的提交中获取 git 子模块的关联提交 ID?

    有没有一种方法 除了实际检查父提交之外 还可以根据父克隆中的提交 ID 确定子模块的 SHA 1 提交 ID 我知道我能找到现在与 SHA 1 关联git submodule 这是一个例子 我有一个带有单个子模块的克隆foo上个月情况发生了
  • 垂直合并2个数据帧[重复]

    这个问题在这里已经有答案了 我有 2 个数据框 每个数据框有 2 列 相同的列名称 我想垂直合并它们以最终得到一个新的数据框 做的时候 newdf df merge df1 how left on Col1 Col2 新的 df 仅包含以下
  • 将代码从没有权限的存储库推送到私有存储库?

    我有一个来自外部存储库 我们称之为 ExRepo 的文件夹 我没有任何推送权限 我有一个名为 MyOwnRepo 的个人存储库 如何获取 ExRepo 并将其合并到 MyOwnRepo 中 我已经尝试过这个 C Users
  • GitPython - 使用 ssh 密钥克隆 - 主机密钥验证失败

    我在应用程序中克隆 git 存储库时遇到问题 KEY FILE opt app ssh id rsa def read git branch config id branch config RepoConfig objects get id
  • Git 和重定向

    我注意到 当 git html 项目页面如下所示 https github com fruux sabre dav 被克隆 以这种方式 git clone https github com fruux sabre dav 实际生成的远程 U
  • 我应该如何将更改从一个提交转移到另一个提交?

    我在同一个分支上有两个提交 一个接一个 我在第一次提交中添加了对文件 A 的更改 然后对其他文件进行了一些更改 然后进行了另一次提交 现在我希望对文件 A 的更改是在第二次提交而不是第一次提交 最优雅的方式是什么 我知道这是一个老问题 但我
  • 在防火墙后面使用 GitHub,无需 SSH 访问

    我真的很想使用 GitHub 但我的公司一切都被锁定了 现在 我只能通过HTTP协议使用Tortoise SVN 我可以以同样的方式使用 GitHub 吗 如果是这样 怎么办 我认为你一直能够克隆github https github co
  • Git 只获取一个目录

    我有一名开发人员负责一个文件夹 另一名开发人员负责另一个文件夹 我想使用特定文件夹更新产品 我正在寻找类似的命令 cd myproject git pull myfolder 并期望只有 myfolder 会被更新 是否可以 好吧 我重新表
  • 从“git diff”中排除文件

    我正在尝试排除一个文件 db irrelevant php 来自 Git diff 我尝试将文件放入db子目录名为 gitattributes与线irrelevant php diff我还尝试创建一个名为 git info attribut
  • 撤消多个文件和文件夹“git add”[重复]

    这个问题在这里已经有答案了 我执行了 git add 现在我想恢复 git add 我怎样才能做到这一点 git reset 这相当于git reset HEAD 将取消 add 更常见的是 取消暂存 所有文件 In Git revert用
  • 未找到 Gradle DSL 方法:“versionCode()”

    构建我的 Android 项目时遇到问题 我使用Grgit https github com ajoberstar grgit填写versionCode and versionName在 gradle 中 一切工作正常 直到我将 Andro
  • 是否有 git-merge --dry-run 选项?

    我正在合并一个可能有很多冲突的远程分支 我怎么知道它是否会发生冲突 我没有看到任何类似的东西 dry run on git merge 如前所述 传入 no commit标志 但为了避免快进提交 也传入 no ff 像这样 git merg
  • git 索引到底包含什么?

    Git 索引到底包含哪些内容 可以使用什么命令查看索引内容 感谢您的所有回答 我知道索引充当暂存区 提交的内容是在索引中而不是工作树中 我只是好奇索引对象由什么组成 我猜它可能是文件名 目录名 SHA 1 对的列表 也许是一种虚拟树 在 G
  • Git 查找第一个非本地提交

    有关的 列出尚未推送到源的 Git 提交 https stackoverflow com questions 3080509 list git commits not pushed to the origin yet git rev par
  • 配置 Eclipse/EGit 来跟踪上游存储库

    我正在使用 EGit 如新的 Eclipse 4 2 Juno 版本中提供的 我在 GitHub 上有一个存储库 是从另一个上游存储库分叉的 当我从 Github 上的存储库在 Eclipse 中创建项目时 它正确设置origin指向 Gi
  • 本地分支显示在 GitHub 的“网络”视图上

    我们使用 Git 我们的工作流程由 dev 和 master 分支组成 它们位于 GitHub 和每个开发人员的本地存储库上 不会直接在 master 或 dev 上执行任何工作 而是在本地分支中执行工作 并且仅在 dev 上进行合并 然后

随机推荐

  • Chrome v41+ 显示性能问题:无;在很多节点上

    我最近注意到 Chrome 在申请时出现呕吐现象display none 到很多节点 CodePen 示例 http codepen io mattdietsche pen JomjWx 在上面的 CodePen 中 您可以看到切换时的滞后
  • 基础5和页面打印

    我正在使用 Zurb 基金会 我试图完全按照大屏幕中的外观打印页面 但所有内容都堆积起来 并且浮动错误 通过将 Foundation min css 中出现的每个 屏幕 替换为 打印 屏幕 我成功地在打印页面中添加了网格 问题是现在取的格子
  • 在多租户架构中为每个租户将异常记录在单独的文件中

    我有一个支持多租户的应用程序 即一台服务器和多个数据库 每个租户都有单独的数据库 应用程序中引发的所有异常都将记录在一个日志中 租户 ID 将与异常一起打印 我想在单独的文件中处理它 即为每个租户一个单独的日志文件 这将有助于确定此异常是由
  • 如何从网页复制特定元素

    我的目标是从网页中获取特定的文本区域 想象一下 就好像您能够在页面上的任何位置绘制一个矩形 并且该矩形中的所有内容都将被复制到剪贴板中 我正在使用 FireBug 请随意建议其他解决方案 我已经搜索了插件或书签 但没有找到任何有用的东西 及
  • Android 应用程序白标 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在尝试寻找为 Android 应用程序添加白色标签的最佳方法 基本上我希望能够构建几乎相同应用程序的多个版本 每个版本将具有不同的资源 例如
  • 多个程序集中相同的完全限定类名

    当我们在两个不同的程序集中定义相同的命名空间和类名而不使用 extern 别名来帮助它决定时 NET 编译器 以及运行时的 CLR 如何确定要使用哪个类 考虑这个示例 全部都在一个 cs 文件中 using System namespace
  • 序列化包含 char* 的结构

    我在序列化 char 字符串时遇到错误error C2228 left of serialize must have class struct union我可以使用 std string 然后从中获取 const char 但我需要 cha
  • 如何从 AWS 中的 Athena 获取结果格式 JSON?

    我想从 AWS 中的 Athena 获取结果值格式 JSON 当我从 Athena 中选择时 结果格式如下 test value report 1 test report 2 normal report 3 hard 有没有办法获得 JSO
  • 如何从 AAssetManager 获取 std::basic_istream?

    我正在使用 NDK 我需要读取资源媒体文件 因此 据我了解 为了访问我需要使用的资源AAssetManager 最终我需要得到std basic istream与它一起工作 那么问题来了 如何获得std basic istream from
  • PHP 中有“nullsafe 运算符”吗?

    有没有办法使用某种方式编写以下语句安全导航操作员 http docs codehaus org display GROOVY Operators Operators SafeNavigationOperator echo data gt g
  • 最上面的“固定”位置 div 与非位置 div 一起移动

    考虑以下代码 div width 100 height 64px border 1px solid 000 top fixed position fixed middle fixed position fixed top 64px bott
  • PHP imagick或任何其他工具,如何检测gif文件上是否有可见的透明度

    我正在开发一项可以将 gif 文件转换为 mp4 文件的服务 使用ffmpeg 我的问题是有些 gif 有visible当我将它们转换为 mp4 视频时 透明区域最终会变成白色 为了避免这个问题 我正在尝试检测 gif 是否有visible
  • 发送 HTTP 标头后服务器无法设置状态 - web api CORS

    好吧 我已经为这件事拼尽全力了 设置 我有一个设置了基本身份验证的 Web Api 2 0 项目 我在 web config 中启用了 CORS 我有 ELMAH 日志记录错误 我有一个 DelegatingHandler 处理传入的请求
  • 如何获得一个 ID 来区分类的不同实例?

    假设我有一个类 有两个实例 MyClass a new MyClass MyClass b new MyClass MyClass 有一个方法 PrintUniqueInstanceID void PrintUniqueInstanceID
  • 比较两个数组,删除匹配的项

    我有两个数组 names and employees 其中填充了代表名称的字符串 names是二维的 保存对匿名数组的引用 但我们关心的数据的位置是 names i 0 我想循环遍历 names并找出哪些名字不在 employees 起初我
  • Spacy 自定义名称实体识别 (NER)“灾难性遗忘”问题

    该模型无法记住之前训练它的标签 我知道这是 灾难性的遗忘 但似乎没有例子或博客可以帮助解决这个问题 对此最常见的反应是这个博客是这样的https explosion ai blog pseudo rehearsal catastropic
  • Vue 单元测试 - 使用 vue-test-utils mount 时模拟导入的服务

    我正在使用 vue test utils 中的 mount 有一个导入应该在单元测试中模拟的服务的组件 我看到 mount 有一个模拟选项 但试图推断给出的示例指南 常见技巧 模拟注射 https github com vuejs vue
  • 如何解决“未找到 .NET SDK”的问题。错误--VSCode

    我正在尝试在本地计算机上设置后端 我已经安装了 v6 dotnet 所有内容都已安装 但是当我运行时dotnet run我收到这个错误 The command could not be loaded possibly because You
  • 如何在之前声明的另一个模板参数中使用模板参数

    模板参数可以在其后的另一个模板参数中使用 如下所示 template
  • Git:合并和子模块

    假设我在 RepoX 中有两个分支 分别称为 Branch 和 Branch Repo 还有一个名为 Submodule 的子模块 BranchA 具有修订版 abc 的子模块 Branch 具有修订版 def 的子模块 A 假设我想将 B