我有两个分支A和B.我想要做的是在A上创建一个新的(合并)提交,当前状态为A作为父级,引用B描述的文件树,丢弃A中的任何内容。 基本上B的历史应该被压缩成一个提交。
具体的存储库状态由两个独立的分支组成,它们没有共同的祖先(来自两个独立的独立存储库),但它们描述了相同的内容。
现在我想找到一个“git” - 将它们组合在一起。一个基本的解决方案(没有git)将是
checkout A,只需将B的内容复制到工作树中,然后执行git commit
。这基本上是我之前所做的将第二个存储库的内容传播到第一个存储库中的内容。
用git做的我已经尝试了
git checkout A
git merge --squash B
但不幸的是,它为A和B之间不同的所有文件生成了合并冲突,这肯定不是我的预期。
基本上像
git merge --squash -s theirs
应该完成这项工作,但合并策略theirs
不存在。阅读文件显示
使用像
git merge -X theirs
这是合并策略recursive
的一个选项。但是这仍然会合并非冲突的块。只有冲突的块才会直接从theirs
获取。
答案 0 :(得分:2)
当您评论所有合并 - 我在“git command for making one branch like another”中列出的策略时,第二个选项接近您的需求:
显示为合并,我们是第一个父母 (由jcwenger提议)
git checkout -b tmp upstream
git merge -s ours thebranch # ignoring all changes from downstream
git checkout downstream
git merge --squash tmp # apply changes from tmp but not as merge.
git rev-parse upstream > .git/MERGE_HEAD #record upstream 2nd merge head
git commit -m "rebaselined the branch from upstream" # make the commit.
git branch -D tmp # deleting tmp