我有两个分支,一个主人和一个实验。显示:
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
如果可能的话,我不想进行任何合并,我想覆盖实验中的任何东西(主要是我的主要优先事项)。
修改 让我简要解释一下这种情况:当我尝试在主分支和实验分支的提示下合并提交时,我会遇到很多合并冲突!如果我尝试从实验中挑选到主人那里,也会发生同样的事情!我希望避免它们,因为我根本不想要实验中的任何变化!到目前为止,我一直在挑选从大师到实验,当有合并冲突时,我只是保持主分支的变化。但经过多次这样做之后,我希望有一些方法我可以做类似于合并的东西,除非在哪里(我没有提示任何合并冲突,因为主变化是我所需要的全部(对于我而言)知道以前在实验分支上的内容并不重要!
答案 0 :(得分:23)
将cherry-pick 从Y
提交master
到experimental
:
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)