reu*_*ohn 15 git branch copy 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
Run Code Online (Sandbox Code Playgroud)
我的实验已经过时了,我希望通过简单地将主分支(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
Run Code Online (Sandbox Code Playgroud)
如果可能的话,我不想做任何合并我想要在实验中覆盖任何东西(master是我的主要优先级).
编辑: 让我简要解释一下这种情况:当我尝试在主和实验分支的提示下合并提交时,我会遇到很多合并冲突!如果我尝试从实验中挑选到主人那里,也会发生同样的事情!我希望避免它们,因为我根本不想要实验中的任何变化!到目前为止,我一直在挑选从大师到实验,当有合并冲突时,我只是保持主分支的变化.但是在做了很多次之后,我希望有一些方法我可以做一些像合并的东西,除了哪里(我没有提示任何合并冲突,因为主变化是我所需要的所有(我知道它不会不管以前在实验分支上做了什么!
Joh*_*web 23
为了摘樱桃 刚刚提交Y来自master于experimental:
git checkout experimental
git cherry-pick Y
Run Code Online (Sandbox Code Playgroud)
或者:
git checkout experimental
git cherry-pick master
Run Code Online (Sandbox Code Playgroud)
...将在master分支的尖端应用提交引入的更改,并experimental使用此更改创建新的提交.
这是我最初尝试过的!:
git checkout experimental
git rebase --onto <COMMIT ID OF LAST MASTER COMMIT> experimental
Run Code Online (Sandbox Code Playgroud)
在尝试这段代码时,我发现不仅主分支的提交,而且整个实验分支都成为了主分支的克隆!是的,这不是一个优雅的解决方案,也是 git 的错误使用!
然而,正如 @Johnsyweb 所指出的,最佳解决方案是将实验和主版本进行合并,但是,
Git 更喜欢在 master 上进行更改而不是在 Experimental 上进行更改
因此做了:
git checkout experimental
git merge -Xtheirs master
Run Code Online (Sandbox Code Playgroud)
应该可以正常工作。虽然它说合并,但由于它只考虑实验分支相对于主分支的更改,因此出于所有实际目的,它更像是从实验分支到主分支的副本。(请参阅此处的
类似讨论)