将Git合并提交合并到孤立分支中

19

我很想知道您是否能够这样做,以及将提交合并到我的孤立分支中是否有任何问题。对于这个特定的实例,我的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)

1
关于您的ASCII图,请阅读我的这个答案的顶部。 - jub0bs
1
你肯定可以做到这一点,而且尝试一下也不会有什么坏处。如果你不喜欢结果,只需重置即可。 - jthill
2个回答

32

使用 git 2.9(2016年6月)版本,合并孤立分支仍然是可行的,但需要加上 --allow-unrelated-histories 选项:

git merge --allow-unrelated-histories a b

查看提交e379fdf(2016年3月18日),由Junio C Hamano(gitster完成。
(由Junio C Hamano -- gitster --合并到提交d04aa7e中,2016年4月8日)

merge:默认情况下拒绝创建过于酷炫的合并

允许将两个独立开始的项目的不相关历史合并为一个是有意义的,就像"gitk"合并到"git"本身中(也被称为“最酷的合并”),但是这样的合并仍然是一件不寻常的事情
更糟糕的是,如果有人通过从已建立的项目的tarball开始创建独立的历史记录,并向原始项目发送拉取请求,“git merge”会毫不犹豫地创建这样的合并,而没有任何异常发生的迹象。

教导“git merge”默认情况下拒绝创建此类合并,除非用户传递一个新的“--allow-unrelated-histories”选项,告诉它用户知道正在合并两个不相关的项目。

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

git merge文档提到:

默认情况下,git merge命令拒绝合并没有共同祖先的历史记录。当合并两个独立项目的历史时,可以使用此选项来覆盖此安全性。
由于这是非常罕见的情况,因此不存在启用此选项的配置变量,也不会添加,文档顶部的选项列表不包含此选项。
此外,git pull不会将此选项传递给git merge(相反,您需要先git fetch,检查您将要合并的内容,然后在本地使用此选项git merge)。


请查看 commit de22496 (2016年4月21日) 由 Junio C Hamano (gitster) 提交。
(由 Junio C Hamano -- gitster -- 合并于 commit 175008d, 2016年4月29日)

pull: 将 --allow-unrelated-histories 参数传递给 "git merge"

原来的写法为:

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

如果有人倾向于添加这样的选项,则需要将此更改中的更新测试调整回原来的状态:
git pull --allow-unrelated-histories something

1
仍然适用于2022年,好的技巧永远不会过时! - Xeltor

12
Git允许合并没有共同根提交的提交。结果将包含在两个分支中存在的文件的并集。这是将两个项目合并为单个存储库的常见实践(例如,Git项目本身是从e83c51633开始的,gitk是从1db95b00开始的,然后这两个项目在5569bf9bb处合并)。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接