当前位置: 首页 > 知识库问答 >
问题:

Git合并提交到孤立分支

子车勇锐
2023-03-14

我很想知道您是否可以,以及将提交合并到我的孤儿分支是否有任何问题。对于这个特定的实例,我的Salesforce存储库有一个主分支和一个预发布分支,但由于我们的沙盒环境通常有不属于生产的元数据,但我们希望对其进行版本控制,但与干净的预发布分支有足够的分离。

因此,我们有以下内容:

(Production Init Commit)    (official release)
 /                         /
o-------------------------o [master]
 \                       /
  o------o---------o----o [pre-release]
          \       /
           o-----O [feature]
                  \ <-- IS THIS ALLOWED/POSSIBLE/BAD IDEA?
                   \ 
       o------------O [DEV] (orphan branch)
      /
     (Initial commit from our sandbox environment)

共有2个答案

席烨
2023-03-14

Git允许合并没有公共根提交的提交。结果将包含两个分支中存在的文件的并集。将两个项目合并到一个存储库中是一种常见做法(例如,Git项目本身在e83c51633启动,gitk在1db95b00启动,两个项目后来在5569bf9bb合并)。

现在,您是否真的想要这样做实际上取决于分支的内容。如果您将沙盒分支合并到特性分支中,那么将特性分支合并到master中也会将沙盒代码合并到master中,这可能是您不想要的。

袁鸿达
2023-03-14

使用git 2.9(2016年6月),合并孤立分支仍然是可能的,但ony使用“允许不相关的历史记录”选项:

git merge --allow-unrelated-histories a b

参见Junio C Hamano的commit e379fdf(2016年3月18日)(gitster)
(由Junio C Hamano--gitster在提交d04aa7e中合并,2016年4月8日)

虽然允许将独立启动的两个项目的不相关历史合并为一个是有意义的,但就像“gitk”被合并为“git”本身也称为“有史以来最酷的合并”一样,这样的合并仍然是一个不寻常的事件。
更糟糕的是,如果有人通过从已建立项目的tarball开始创建独立历史并向原始项目发送拉取请求,“git合并”然而愉快地创建了这样的合并,而没有任何不寻常的迹象正在发生。

设定“git merge”默认情况下拒绝创建这样的合并,除非用户传递一个新的“--允许不相关的历史记录”选项,告诉它用户知道两个不相关的项目被合并了。

因为这样的“两个项目合并”是一个罕见的事件,所以没有添加始终允许这样合并的配置选项。

git合并文档提到:

默认情况下,git合并命令拒绝合并不共享共同祖先的历史记录。当合并两个独立启动的项目的历史时,此选项可用于覆盖此安全性。
由于这是一个非常罕见的情况,默认情况下不存在启用此功能的配置变量,并且不会添加,并且此留档顶部的选项列表没有提及此选项。
此外git拉不会将此选项传递给git合并(相反,您git fetch首先检查您将合并的内容,然后使用此选项在本地进行git合并)。

参见Junio C Hamano(gitster)的commit de22496(2016年4月21日)
(由Junio C Hamano--gitster--2016年4月29日提交175008d合并)

而不是:

git fetch something &&
git merge --allow-unrelated-histories FETCH_HEAD

如果有人倾向于添加这样的选项,则需要将此更改中的更新测试调整回:

git pull --allow-unrelated-histories something

 类似资料:
  • 我有一个由另一个人生成的孤立提交,我在GitHub GUI中看到了它。克隆存储库无法访问此提交,因为路径上没有包含此提交的分支/标记。假设提交的作者已经删除了他的本地存储库,我希望直接在GitHub中为这个提交分配一个分支/标记。 这个提交可以通过我可以使用的直接链接看到,因为它是已知的git哈希。在洞察中看不到promise 如何在GitHub中从此提交页面为提交分配标签?是否可以直接从此页面创

  • 我们介绍一下merge的特殊选项:squash 用这个选项指定分支的合并,就可以把所有汇合的提交添加到分支上。 主要使用的场合: 汇合主题分支的提交,然后合并提交到目标分支。

  • 问题内容: 我正在寻找一种自动将Master分支合并到一个或多个开发分支的方法。换句话说,我想在多个项目中每天将团队开发部门与Master同步。 我一直在考虑使用Jenkins,但经验不足。Jenkins是否可以通过添加多个存储库URL,然后在配置中指定“合并到的分支”来提供此功能?与合并问题相比,我不太关心项目的构建。詹金斯将如何应对失败的合并? 詹金斯会很理想,但是如果有其他方法,我很想听听。

  • 我在编辑代码之前忘记了我的代码;当我提交新代码并尝试推送时,我得到了错误“推送是不可能的”。 那时我做了一个,突出显示了一些冲突的文件。我删除了冲突,但我不知道从这里该怎么办。 我再次尝试git提交,但它说“提交是不可能的,因为您有未合并的文件”:

  • 我们将尝试在github中创建一个工作流,其中每个票据都是master的分支 票据完成后,工作将合并到暂存中,在暂存中执行回归和集成测试,然后将其合并到主控中。 一个团队领导提出了合并后旧票分支的问题。 我发现了这个脚本,想知道它是否能在我们的环境中工作。我们只想删除已经合并到主目录中的分支。

  • 本文向大家介绍Git 提交后,包括了Git 提交后的使用技巧和注意事项,需要的朋友参考一下 示例 该挂钩在commit-msg挂钩之后立即被调用。它不能更改git commit操作的结果,因此主要用于通知目的。 该脚本不带任何参数,并且其退出状态不会以任何方式影响提交。