Git 子树合并在合并简单的上游更改时报告冲突

2023-12-02

我开始学习 git 1.8.2 中的子树合并。我创建了一个简单的示例来测试将第三方存储库迁移到主项目的更改。

我正在关注6.7 Git 工具 - 子树合并例子。

“子”项目作为子目录包含在“主”项目中。

对“子”项目进行更改后,当我尝试将更改合并到“主”项目中时,git 报告冲突。

测试总结

  1. 为项目“主”和“子”创建存储库(子而不是机架)
  2. 将名为 sub_remote 的远程添加到引用 sub 的 main 中
  3. 使用 sub_branch 跟踪 sub_remote
  4. 更改并提交“子”项目中文件中的一行
  5. 将更改从子分支拉到主/子分支
  6. 将 main/sub_branch 合并到 main/master 中。

合并因冲突而失败。 Merge 对于保留更改行的哪个版本感到困惑。

<<<<<<< HEAD
main
=======
main upstream change
>>>>>>> sub_branch
main.git
sub
sub.git
tm

完整的测试脚本

#!/bin/sh

# initialize empty repos
for i in main sub
do
  rm -rf $i{,.git}
  mkdir $i.git
  cd $i.git;
  git --bare init;
  cd ..;
  git clone $i.git
  cd $i
  echo $i > readme.md
  git add readme.md
  git commit -a -m "added readme.md"
  git push origin master
  cd ..
done

# add data to sub
ls > sub/data
cd sub
git add data
git commit -m "Added data"
git push origin master
cd ..

# add sub as a sub-tree in main
cd main
git remote add sub_remote ../sub.git
git fetch sub_remote
git checkout -b sub_branch sub_remote/master
git checkout master
git read-tree --prefix=sub/ -u sub_branch
git commit -m "Added sub"
git push origin master
cd ..

# make change to sub
cd sub
sed -i -e 's/main$/main upstream change/' data
git commit -a -m "upstream change made to data"
git push origin master
cd ..

# merge sub change to main
cd main
git checkout sub_branch
git pull

#merge sub_branch changes into master
git checkout master
git merge -s subtree sub_branch
cat sub/data

What read-tree在这种情况下所做的只是将另一棵树的内容添加到当前树中的目录中。这些内容的添加就像创建和添加常规文件和目录一样,没有历史记录。所有这些文件都将被视为您创建的文件。

当您尝试合并进程失败时,因为它看到 sub_branch 历史创建了data文件,并且目标目录还包含不同的data您创建的文件。

您正在使用的页面缺少使子树正常工作的非常重要的步骤,以便您实际上能够对其进行更新。

正确的示例可以在这两个页面中看到:https://www.kernel.org/pub/software/scm/git/docs/howto/using-merge-subtree.html https://help.github.com/articles/working-with-subtree-merge

您的情况缺少的是在创建子树时正确链接历史记录:

# create the merge record but not change anything in your tree yet
git merge -s ours --no-commit sub_branch
# bring the changes and place them in the proper subdirectory
git read-tree --prefix=sub/ -u sub_branch

在此之后你的main存储库将包含历史记录sub存储库。对失败的合并的调用现在应该可以正常工作。呼唤git log --graph会让你看到不同的提交是如何合并的。

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

Git 子树合并在合并简单的上游更改时报告冲突 的相关文章

  • git,Heroku:预接收挂钩被拒绝

    我正在设置 git 存储库并尝试将其链接到 Heroku 当我运行命令时 git push heroku master 我收到 Counting objects 7 done Delta compression using up to 2
  • 哪种 git commit 实践更好?

    我坚信 对一个问题做出一次承诺是一种很好的做法 我确信我在 最佳实践 之类的文章中读过它 因此 我的工作流程如下 对于新问题 我创建了一个新的本地分支git checkout b new issue 将所有更改提交到其中 有时这涉及到lot
  • Git 提交到公共子模块(主分支)

    我有两个或更多项目 我们称它们为Foo项目 and 项目栏 有一些通用代码我放入了一个子模块 我的理解是 如果我从内部提交对子模块的更改Foo项目它将在一个超然的头脑中 只有所有Foo项目克隆人可以看到 master cd ProjectF
  • 我在使用“heroku open”命令时遇到错误

    我在 heroku 上创建了一个 python 应用程序 推动后我给了heroku open命令 我在浏览器上遇到这样的错误 Application Error An error occurred in the application an
  • 在 Windows 上,无法创建目录“/home/<用户名>/.ssh”

    要使用 gitbash 在 Windows 上配置 git 如所解释的here https help github com articles generating a new ssh key and adding it to the ssh
  • 递归地将整个文件夹添加到存储库

    我正在尝试向 GitHub 上的 master 分支添加一个分支 并将一个文件夹推送到该分支上 分支的文件夹结构如下所示 Social App Source Code Dev Trunk Social App 以及所有源代码文件都在最后一个
  • 如何提交 git 标签?

    我已成功对中央 git 存储库进行 提交和推送更改 我现在意识到我想标记所有文件的当前版本 所以我这样做 git tag a 0 5 这样就成功了 但现在我尝试git push我被告知没有什么可承诺的 如何将新标签推送到中央存储库 注意gi
  • Git分支切换不会改变代码文件夹文件

    这是后续this https stackoverflow com questions 9406651 code base for git master feature branch问题 我使用克隆了远程主项目文件夹git clone ema
  • 如何将 HEAD 移回之前的位置? (分离头)和撤消提交

    在 Git 中 我试图做一个squash commit通过合并到另一个分支然后重置HEAD通过以下方式前往上一个地点 git reset origin master 但我需要走出这一步 如何将 HEAD 移回之前的位置 我有 SHA 1 片
  • 从 master 分支部署特定功能

    假设我们使用两个分支进行开发 staging and master 在迭代期间 所有团队成员所做的所有更改都会定期合并到staging分支并出现在我们的暂存环境中 客户能够查看更改并提供反馈 在迭代结束时我们合并staging分支到mast
  • 在 GitHub 上看不到“在 Xcode 中打开”按钮

    正如在GitHub 和 Xcode 9 中的新源代码管理工作流程 https developer apple com videos play wwdc2017 405 time 204Apple 视频会话 我们可以直接从 Xcode 克隆项
  • Git 将新的本地分支推送到远程,无需指定名称

    当针对特定的跟踪问题进行补丁修复时 我们的工作流程如下所示 1 git checkout patch git pull upstream patch make sure we re up to date 2 git checkout b i
  • 当我所做的只是压缩提交时,为什么 git-rebase 会给我带来合并冲突?

    我们有一个包含 400 多个提交的 Git 存储库 其中前几十个提交需要大量的反复试验 我们希望通过将许多提交压缩为单个提交来清理这些提交 当然 git rebase 似乎是最佳选择 我的问题是它最终会产生合并冲突 而且这些冲突并不容易解决
  • Git fetch 在 for-each-ref 中不显示远程分支

    我有一个远程分支feature test2 我想把它拿过来 我跑 git fetch origin feature test2 我得到 From
  • 致命错误:找不到“Fabric/Fabric.h”文件

    我正在使用 xcode 6 3 1 OSX 10 10 3 并且我已经在本地系统上成功配置了 crashlytics 它工作正常 并通过 Fabric 应用程序发布构建 但是当我将相同的代码库转移到 teamcity 时 它向我显示以下错误
  • Git 和外部备份。子目录是空的,我宁愿它不是空的。

    我想使用 Git 创建外部备份系统 这部分是受到答案的启发在外部磁盘上备份整个 git 存储库的最佳方法是什么 https stackoverflow com a 4372855 2533127 其中建议如下 您还可以通过启动一个新的存储库
  • 更快的“git rebase --preserve-merges”方法

    我通过创建一系列功能分支来使用 git 并在完成后将它们合并到 mastergit merge no ff 这会创建空的合并提交 可用于识别先前功能分支的起点和终点 为了处理多个并发分支 甚至嵌套分支 我使用 rebase 我从不合并回去
  • git 列出所有可用命令

    有没有命令可以显示 GIT 中所有可用命令的列表 有git help但它显示 usage git version exec path
  • 从子文件夹自动部署 Heroku

    我知道你可以从github自动部署到heroku 但我还没有找到一种方法只将子文件夹从github推送到heroku 从命令行我知道可以通过以下方式执行此操作 git subtree push prefix
  • 运行 npm install - 如何配置不使用 SSH(端口被防火墙阻止)

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

随机推荐

  • Caffe:如果两层反向传播渐变到同一个底部斑点会发生什么?

    我想知道如果我有一个层生成一个底部斑点 该斑点进一步被两个后续层消耗 这两个层都会生成一些梯度来填充反向传播阶段的 Bottom diff 将两个梯度相加形成最终梯度吗 或者说 只有他们一个人能够活下去 根据我的理解 Caffe 层需要在用
  • FOS用户包认证

    How FOS 用户包通过此服务容器对用户进行身份验证 this gt container gt get security context gt getToken gt getUser 我想操纵身份验证过程 我应该在捆绑包中查看哪里 实际上
  • Android 设备安装新字体

    我需要在我的 Android 设备上安装泰米尔字体 是否可以在 Android 设备中安装新的 Unicode 字体 您可以将自己的字体嵌入到自己的应用程序中供自己使用 您无法将字体添加到现有设备 除非作为自定义固件构建的一部分 或者可能通
  • Swift 将 .uppercaseString 仅应用于字符串的第一个字母

    我正在尝试制作一个自动更正系统 当用户输入大写字母的单词时 自动更正不起作用 为了解决这个问题 我复制了键入的字符串 应用了 lowercaseString 然后比较它们 如果字符串确实输入错误 则应该更正该单词 然而 替换键入的单词的单词
  • 使用概念来选择类模板专业化

    这个问题演示如何使用 C 20 概念进行选择超载 for a function模板 我正在尝试做类似的事情 选择专业化 for a class模板 我从一个类模板开始Angle
  • 使用 pandas 从 zip 中读取特定的 csv 文件

    这是我感兴趣的一个数据 http fenixservices fao org faostat static bulkdownloads Production Crops E All Data zip 它由 3 个文件组成 我想用 panda
  • 连接未知数量的列和行[重复]

    这个问题在这里已经有答案了 几天来我一直在尝试一些东西 但我真的很迷失 有人可以帮我吗 我想将 Excel 中的列从第一列连接到最后一个非空列 并在每列之间添加逗号 接下来 我想应用从第一行到最后一个非空行的循环 我成功地使用已知数量的列
  • 使用 Google Apps 脚本将所有工作表转换为 PDF

    我正在尝试将包含多个工作表的 Google 电子表格转换为 PDF 文件 下面的脚本有效 但它仅创建包含电子表格最后一页的 PDF function savePDFs SpreadsheetApp flush var ss Spreadsh
  • 如何在 Mac OS X 上强制使用 64 位 python?

    使用 arch x86 64 选项编译 sip 时出现以下错误 prosseek siplib smcho python c import sip print sip Traceback most recent call last File
  • Qt4 + matplotlib 的 mplot3d

    我正在尝试在 Qt4 GUI 中嵌入 3D 绘图 有其他按钮 这可以使用 matplotlib 的 mplot3d 吗 我知道可以使用 matplotlib backends backend qt4agg 绘制二维图 并且我已经这样做了 如
  • C++ - 排序算法看不到用户定义类型的重载“<”运算符。

    好的 我有 1 个名为的用户定义类型fraction它代表带有分子和分母的普通分数 这是代码 class Fraction private int numerator int denominator public Fraction int
  • 如何使用 JSON 数据填充 React Select?

    如何填充选项反应选择使用下面没有的 JSON 数据value and label特性 sortCode 55 77 42 accountNumber 08488234 accountType Savings Account accountN
  • 替换 JSON 中的属性值

    如果我有一个看起来像这样的 JSON 结构 var user map width 785 height 791 image name image png size width 32 properties firstName Bob last
  • 我可以在 UITextField 中放置不可编辑的文本吗

    我想在 UITextField 内放置一些固定文本 但在插入点之前 有点像这样 他 走向 其中 towaards 是可编辑部分 重点是在上下文中显示可编辑文本 这可能吗 和 或有更好的选择吗 我想你可以通过实施来做到这一点UITextFie
  • 如何使用 opencv android 通过触摸事件提供流体效果/调整位图大小

    我是 OpenCV4Android 和 Android NDK 的新手 努力实现 相对于图像上的触摸点拉伸图像 将头发放在脸上并使用触摸事件相应地拉伸它 例如 虚拟化妆应用程序 问题 使用 Java 时 通过从位图获取矩阵并在触摸事件上重新
  • JavaScript 计算返回 NaN 作为结果

    我正在开发一个 html 页面 它需要日期并显示日期 我正在使用一个称为泽勒同余的公式 但在 JavaScript 中 公式返回结果 NaN 我用谷歌搜索了这个问题 无法找出解决方案 这是接受值的 html
  • 有没有办法编写通用代码来查找 Go 中切片是否包含特定元素?

    我想知道是否有一种通用的方法来编写代码来判断切片是否包含元素 我发现它通常很有用 因为有很多逻辑来首先判断特定元素是否已经在切片中 然后决定要做什么接下来做 但似乎没有一个内置的方法 看在上帝的份上 为什么 我尝试使用interface 这
  • java 1.6 中 String.split 的行为?

    我的代码是 String s 1 23 System out println s split length 并给出输出5 的源代码split is public String split String regex return split
  • 行组内的 ssrs 列可见性

    我有一份报告 其中有多个组 主要在行和一个列组中 但我需要根据所选参数显示某些列 如图所示 当我右键单击专业列时 列可见性不可用 有人可以帮我解决这个问题吗 thanks source ravidowluri com 我自己解决了这个问题
  • Git 子树合并在合并简单的上游更改时报告冲突

    我开始学习 git 1 8 2 中的子树合并 我创建了一个简单的示例来测试将第三方存储库迁移到主项目的更改 我正在关注6 7 Git 工具 子树合并例子 子 项目作为子目录包含在 主 项目中 对 子 项目进行更改后 当我尝试将更改合并到 主