由于git子模块未合并文件,因此无法提交 现在我们去看开发者B

如何解决由于git子模块未合并文件,因此无法提交 现在我们去看开发者B

我们有一个带有一堆子模块的仓库,我们目前正在开发 develop 分支。

从同一共同提交开始,两名开发人员 A B 对某些文件进行了一些更改(我认为在这里不重要),并添加了一个新修订版子模块,然后致力于开发。 现在, develop 拥有开发人员 A 提交的 subm rev1 ,而 B develop 分支保存 subm rev2 ,因此当 B 尝试提取所做的更改时会产生冲突

在合并冲突后,git status会给 B

Your branch and 'origin/develop' have diverged,and have 1 and 1 different commits each,respectively.
  (use "git pull" to merge the remote branch into yours)

All conflicts fixed but you are still merging.
  (use "git commit" to conclude merge)

Changes to be committed:
        modified:   path/to/another/submodule
        modified:   path/to/file/file.html

现在,每当 B 尝试提交时,它就会得到:

U       path/to/subm
error: Committing is not possible because you have unmerged files.
hint: Fix them up in the work tree,and then use 'git add/rm <file>'
hint: as appropriate to mark resolution and make a commit.
fatal: Exiting because of an unresolved conflict.

我试图寻找解决方案,它们似乎都建议将有冲突的文件添加到舞台上,以将其标记为已解决,但是git status没有列出任何未合并的文件。

我似乎在这里缺少任何东西,我们将不胜感激。

解决方法

您需要在这里实现的是,一个Git子模块是另一个Git存储库

在这里标记所有正在使用的存储库。我将假设两个开发人员都有他们自己的克隆,以便在第三个位置(也许是GitHub,也许是公司服务器,不管它是什么)有另一个Git:

  • CentralSuper:这是两个开发人员都克隆的存储库。
  • CentralSubmod1:这是子模块#1,将被克隆到path/to/another/submodule中。
  • CentralSubmod2:这是子模块#2,将被克隆到path/to/subm中。
  • DevASuper:这是开发人员A的超级项目克隆。
  • DevASubmod1:这是开发人员A使用的子模块#1的副本。
  • DevASubmod2:这是开发人员A正在使用的子模块#2的克隆。
  • DevBSuper:这是开发人员B的超级项目克隆。
  • DevBSubmod1:这是开发人员B的子模块#1克隆。
  • DevBSubmod2:这是开发人员B的子模块#2克隆。

开发人员A在DevASuper中进行某些工作时,他:

  • 修改或不修改某些文件-并不是那么重要;
  • 进入他的DevASubmod2存储库并修改一些文件;
  • 在DevASubmod2中提交以进行新的 commit ,该提交将获得新的唯一哈希ID;我们称之为X;
  • 返回DevASuper并使用git addDevASubmod2中添加新提交作为更新的 gitlink 条目;和
  • 在DevASuper中提交。

DevASuper中的新提交包含一个gitlink,内容为“在子模块#2中使用提交X”。

开发人员A可以将此新提交推送到中央超级项目(可能在分支上)。在执行此操作之前,他还应该将新的DevASubmod2提交推送到CentralSubmod2(也可能在分支上)。谁将这些合并到CentralSuper上名为develop的分支,应确保首先对每个人都可用CentralSubmod2中的子模块存储库提交,大概是通过首先合并。 (合并它们的人可能是开发人员A本人。这只是一个通用模式:必须首先提供子模块提交。)

让我们在CentralSuper的develop分支上调用最终提交,提交SX,其中S代表Super,X代表commit {{1 }}(commit SX使用/引用从子模块2提交X)。

现在我们去看开发者B

在此之前或此时,开发人员B可以在其三个存储库中的任何一个中进行新的提交。根据您发布的内容,看来他已经在DevBSubmod2中进行了新提交。我们将此提交称为X。就像提交Y一样,它也是一个丑陋的哈希ID。

像开发人员A一样,开发人员B现在应该并且显然已经使用Xgit add在他的DevBSuper存储库中进行新提交。我们将此提交称为git commit

因此,现在,开发人员B希望将他的新提交与合并开发人员A的提交者的最终结果合并。但是提交SY使用哈希X ,而SX使用哈希Y

这是您看到的子模块冲突:

SY

B正在/正在使用的超级项目有一个提交U path/to/subm error: Committing is not possible because you have unmerged files. hint: Fix them up in the work tree,and then use 'git add/rm <file>' hint: as appropriate to mark resolution and make a commit. fatal: Exiting because of an unresolved conflict. ,表示为 use Y ,还有一个提交SY,其表示为 use X 。这些“使用”的东西是这两次提交中的 gitlinks

Git 不能自行解决。如果正确的解决方案是使用SX ,则开发人员B应将其放入其超级项目的索引中。如果正确的解决方案是使用X ,则开发人员B应将 that 放入其超级项目的索引中。但是,提交Y或提交X都不是在开发人员B的超级项目存储库中用于新提交的正确提交。

如果这最后一个是正确的,那么开发人员B现在必须做的是:

  • 输入他的DevBSubmod2存储库。
  • 在此存储库中进行工作,以合并提交YX
  • 测试结果(独立运行,并在开发人员B的DevBSuper存储库中使用建议的新提交)。一旦一切顺利,进行一些新的提交Y。确保这是DevBSubmod2中的当前提交
  • 返回到他的超级项目DevBSuper,并告诉他的Git使用Zpath/to/subm添加为提交Z。这样可以解决合并冲突,并说正确的gitlink会提交git add path/to/subm。提交Z和提交X都不正确; Y是正确的。
  • 使用此gitlink在DevBSuper中进行新的合并提交。我们将此提交称为Z

这时,开发人员B现在可以将它们发送回各个中央存储库,再次记住,在使提交SZ对所有人可用之前,新的子模块提交必须对所有人都可用,因为 using SZ要求他们获得提交SZ

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-