繁体   English   中英

如何仅将一个提交合并到 master 而不是分支的所有提交?

[英]How to merge only one commit to master and not all commits of a branch?

我有两个名为devmaster的分支。 目前,提交如下所示:

dev    master
---    ------
A       A
B       B
C       
D
E

现在我只想合并提交E到分支master 所以这将是预期的结果:

dev    master
---    ------
A       A
B       B
C       E
D
E

知道我该怎么做吗?


另外,我应该如何设法将提交CD稍后合并到分支master以实现完全同步。

TL;博士

首先, E不应该依赖于CD 否则,您可能必须解决一些冲突,否则您将处于不完整的 state 中。

问题通常有另一种解决方案。 我会尝试提供一些。

1. 樱桃采摘

A--B(master)--C--D--E(dev)

master分支指向的地方创建一个分支: git checkout -b topic master

A--B(master, topic)--C--D--E(dev)

樱桃采摘提交E : git cherry-pick E

A--B(master)--C--D--E(dev)
     \
      E'(topic)

topic分支合并到master分支: git checkout master git merge topic

A--B--C--D--E(dev)
     \
      E'(master, topic)

此时,如果你将dev分支变基到master分支, E提交将消失,因为它们(应该)相同: git checkout dev git rebase master

A--B--E'(master)--C--D(dev)

2. 交互式变基

A--B(master)--C--D--E(dev)

交互式 rebase dev分支到master分支并在C提交之前移动E提交: git checkout dev git rebase -i master

A--B(master)--E--C--D(dev)

E提交点处创建一个分支: git checkout -b topic E

A--B(master)--E(topic)--C--D(dev)

合并topic分支到master分支: git checkout master git merge topic

A--B--E(master)--C--D(dev)

3.变基--onto

A--B(master)--C--D--E(dev)

dev指向的地方创建一个分支: git checkout -b topic dev

A--B(master)--C--D--E(dev, topic)

运行git rebase --onto BD topic

A--B(master)--C--D--E(dev)
     \
      E'(topic)

此时,如果你将dev分支变基到master分支, E提交将消失,因为它们(应该)相同: git checkout dev git rebase master

A--B--E'(master)--C--D(dev)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM