Git Merge承诺进入一个孤儿分支

时间:2014-12-24 19:23:24

标签: git merge orphan

我很想知道你是否可以以及如果将提交合并到我的孤儿分支中是否有任何问题。对于此特定实例,我的Salesforce存储库具有主分支和预发布分支,但由于我们的沙箱环境通常具有不属于生产的元数据,但我们希望对其进行版本控制,但与我们的干净预发布分支分开。< / p>

因此,我们有以下内容:

(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 个答案:

答案 0 :(得分:20)

使用git 2.9(2016年6月),仍然可以合并孤立分支,但使用--allow-unrelated-histories选项:

git merge --allow-unrelated-histories a b

commit e379fdfJunio C Hamano (gitster)(2016年3月18日) (由Junio C Hamano -- gitster --commit d04aa7e合并,2016年4月8日)

  

merge:默认情况下拒绝创建太酷的合并

     

虽然允许合并两个不相关的历史是有意义的   以"gitk" was merged to "git" itself aka "the coolest merge ever"这样的合并方式独立开始的项目   仍然是一个不寻常的事件   更糟糕的是,如果某人通过从已建立项目的tarball开始创建独立历史记录并向原始项目发送拉取请求,那么#34; git merge&#34;然而,幸福地创造了这样一个合并,没有任何不寻常的事情发生的迹象。

     

教#34; git merge&#34;拒绝默认创建这样的合并,   除非用户传递了新的&#34; --allow-unrelated-histories&#34;选项   告诉它用户知道两个不相关的项目   合并。

     

因为这样一个&#34;两个项目合并了#34;是一种罕见的事件,一种配置   不添加总是允许这种合并的选项。

git merge doc提及:

  

默认情况下,git merge命令拒绝合并不共享共同祖先的历史记录。当合并两个独立开始的项目的历史时,此选项可用于覆盖此安全性   由于这是一个非常罕见的场合,默认情况下不存在任何默认启用的配置变量,并且不会添加,本文档顶部的选项列表未提及此选项。
  此外,git pull未将此选项向下传递至git merge(相反,您git fetch首先检查您要合并的内容,然后使用此选项检查本地git merge

commit de22496Junio C Hamano (gitster)(2016年4月21日) (由Junio C Hamano -- gitster --合并于commit 175008d,2016年4月29日)

  

pull:将--allow-unrelated-histories传递给&#34; git merge&#34;

     

而不是:

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

如果有人倾向于添加这样的选项,请更新此测试   变化需要调整回:

git pull --allow-unrelated-histories something

答案 1 :(得分:9)

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

现在,你真的想要这样做真的取决于分支的内容。如果将沙箱分支合并到功能分支中,那么将功能分支合并到主分区也会将沙箱代码转换为主分区,这可能是您不想要的。