如何在git中将提交从一个分支复制到另一个分支而不进行任何合并?

时间:2013-09-12 19:07:28

标签: git copy branch commit

我有两个分支,一个主人和一个实验。显示:

master-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-Y
                  \
                   -x-x-x-x

我的实验已经过时了,我希望通过简单地将主分支( Y )中的最后一次提交复制到实验来更新它:

master-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-x-Y
                  \
                   -x-x-x-x-Y

如果可能的话,我不想进行任何合并,我想覆盖实验中的任何东西(主要是我的主要优先事项)。

修改 让我简要解释一下这种情况:当我尝试在主分支和实验分支的提示下合并提交时,我会遇到很多合并冲突!如果我尝试从实验中挑选到主人那里,也会发生同样的事情!我希望避免它们,因为我根本不想要实验中的任何变化!到目前为止,我一直在挑选从大师到实验,当有合并冲突时,我只是保持主分支的变化。但经过多次这样做之后,我希望有一些方法我可以做类似于合并的东西,除非在哪里(我没有提示任何合并冲突,因为主变化是我所需要的全部(对于我而言)知道以前在实验分支上的内容并不重要!

2 个答案:

答案 0 :(得分:23)

cherry-pick Y提交masterexperimental

git checkout experimental
git cherry-pick Y

可替换地:

git checkout experimental
git cherry-pick master

...将在master分支的顶端应用提交引入的更改,并在experimental中使用此更改创建新提交。

答案 1 :(得分:3)

以下是我最初的尝试!:

git checkout experimental
git rebase --onto <COMMIT ID OF LAST MASTER COMMIT> experimental

在尝试这段代码时,我发现不仅主人的提示,而且,整个实验分支也成了主人的克隆!是的,这不是一个优雅的解决方案和git的糟糕用法!

然而,正如@Johnsyweb所指出的,最佳解决方案是合并实验和主,但

  

Git更愿意对主变更改   实验性的

因此做了一个:

git checkout experimental
git merge -Xtheirs master

应该可以正常工作。 虽然它说合并,因为它只考虑实验分支相对于主分支的变化,它更像是从实验到硕士的副本,用于所有实际目的。
(参见类似的讨论here