将master合并到孤立分支中,但不保留提交历史记录

8

假设有一个没有历史记录的孤立分支(orphan),我该如何将自孤立分支创建时起直到现在在master分支上所做的更改合并到孤立分支中,而不必复制所有提交记录并将其推送到远程仓库。

A <- B <- C <- D  

        orphan(created from state B) <-X <- Y

我想将 cd 带到孤儿分支,然后将 xy 带到主分支。
如果我执行 checkout orphan, merge master 或者 rebase master,则孤儿分支会得到提交和完整的历史记录。例如,当我将孤儿分支推送到远程服务器时,每个人都能够看到全部 master 的历史记录。
此外,我之后想将 orphan 合并回主分支,并将提交 xy 带回主分支。
编辑:现在使用 git merge 将孤儿分支合并回主分支可以正常工作。
A <- B <- C <- D <------X <- Y
                       /  
        orphan <-X <- Y 

但是,master合并回orphan会将整个master历史记录放入orphan中(例如成为先于BX),或者使用樱桃拣选,但我需要跳过合并提交,并且会遇到更多的冲突。


1
在Git中,不存在“没有历史记录的分支”这样的概念:提交就是历史记录,如果要有一个分支名称,必须有一个提交:分支名称指向该提交(其历史记录基于该提交的父级、父级的父级等)。您的图表也没有绘制由git checkout --orphan创建的分支类型。因此,我无法从您的问题中得出任何意义。 - torek
如果你想把一个仓库的提交记录带到另一个不相关的仓库中,可以使用 git format-patch 生成补丁文件,然后在目标仓库中使用 git am 应用它。 - jingx
我想你需要展示一系列实际的命令来生成这个“孤立分支”,以便我们更好地理解你。 - jingx
1
@jingx:使用git checkout --orphan命令,然后紧接着使用git commit命令,你可以创建一个分支,其历史记录与现有分支无关。或者更准确地说,你可以在提交图中从新的根提交开始创建一个单独的子图。但这不是Alex所画的内容。 - torek
1
将孤立分支(orphan branch)变基到主分支(master branch),并进行交互式变基,从孤立分支中删除所有不需要的提交,然后将其推送到上游。 - Samuel Robert
显示剩余12条评论
3个回答

2
移植就是为此而建立的。
root=$(git rev-list my-orphan-branch --max-parents=0)  # get the orphaned-branch root
echo $(git rev-parse $root B) >.git/info/grafts        # locally remember its real parent

现在所有本地命令都将知道祖先,但它将保持存储库本地化,推送和获取不会导出它。


0

根据评论和您的意图,我建议采用另一种工作流程/设计,以避免需要进行超出常规的Git操作。

听起来有一些特殊的配置文件或设置,其中包含密码或类似的敏感信息,您不想将其传递回远程,这些信息已经嵌入到您在存储库中编译的文件中。为什么不将它们与代码分开?如果这些文件已经分开了,那么您只需将其添加到.gitignore中即可。无论如何,最好同时拥有一个标准默认值,该默认值已编译或者是随着存储库(和/或应用程序本身)分发的默认配置文件,然后让代码检查自定义配置文件的存在,该文件保存在存储库之外或使用.gitignore忽略。

如果不了解您的设置(Linux/PC/Mac,编程语言,框架等)就很难提供进一步的指导 - 例如,在使用Visual Studio进行C#开发时,可以设置一个 Properties.Settings 文件。 默认值成为已编译代码的一部分,但是会自动生成一个类,该类将保存任何更改到用户特定的文件中,并在应用程序启动时重新加载它,但此文件位于用户主目录中,而不是开发文件夹中。另一种方法是将文件存储在本地,并使用 .gitignore 使Git在仓库之间不传输它。

我认为这种方法从长远来看会更好,尽管可能会在短期内产生更新设计以进行更好的配置管理的成本。 我担心的是,如果每次需要推送更改时都需要非标准的Git巫术,将导致有时会有人忘记采取额外的步骤,并将敏感信息推送到远程。


0

试试这个:

git checkout orphan
git merge --no-commit --squash master
git commit

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