Git 用他们的取代我们的

Git 用他们的取代我们的,git,Git,我有两个分支A和B。我想做的是在A上创建一个新的(合并)提交,当前状态为A作为父级,该父级引用由B描述的文件树,从A中丢弃任何内容。 基本上,B的历史应该压缩成一个提交 具体的存储库状态由两个独立的分支组成,它们没有共同的祖先(来自两个以前独立的存储库),但描述相同的内容。 现在,我想找到一种“git”——将它们结合在一起的方法。一个基本的解决方案(没有git)是 签出A并将B的内容复制到工作树中,然后执行Agit提交。这基本上就是我之前所做的,将第二个存储库的内容传播到第一个存储库中 用git

我有两个分支A和B。我想做的是在A上创建一个新的(合并)提交,当前状态为A作为父级,该父级引用由B描述的文件树,从A中丢弃任何内容。 基本上,B的历史应该压缩成一个提交

具体的存储库状态由两个独立的分支组成,它们没有共同的祖先(来自两个以前独立的存储库),但描述相同的内容。 现在,我想找到一种“git”——将它们结合在一起的方法。一个基本的解决方案(没有git)是 签出A并将B的内容复制到工作树中,然后执行A
git提交
。这基本上就是我之前所做的,将第二个存储库的内容传播到第一个存储库中

用git做这件事我已经试过了

git checkout A
git merge --squash B
但不幸的是,它为所有不同于A和B的文件生成了合并冲突,这显然不是我所期望的

基本上

git merge --squash -s theirs
应该执行此任务,但合并策略
他们的
不存在。阅读docu节目 使用类似

git merge -X theirs

这是合并策略
递归
的一个选项。但这仍然会合并非冲突块。只有冲突的块直接从它们的
中获取

正如您所评论的,从我在“”中列出的所有合并策略中,第二个选项接近您所需要的:

显示为合并,我们作为第一个父级。
(提议人)


其中一个
合并--他们的
策略在这里有用吗?上述模拟#2应该可以完成这项工作。我只是把它用到了
合并--squash
。之后,在B的历史中,有一个来自a的合并,但这是可以的。如果不需要,B可以重新设置。好的,我添加了#2作为答案。
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