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