6

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

具体的存储库状态由两个独立的分支组成,它们没有共同的祖先(来自两个以前独立的存储库),但描述了相同的内容。现在我想找到一种“git”方式将它们组合在一起。一个基本的解决方案(没有 git)是检查 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.

4

1 回答 1

2

正如您评论的那样,从我在“ git command for making one branch like another ”中列出的所有 merge --theirs 策略中,第二个选项接近您的需要:

显示为合并,我们的作为第一个父项。
(由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
于 2012-08-03T11:27:50.753 回答