如何仅将一个提交合并到 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;DR

首先,E 不应依赖于 CD。否则,你可能会不得不解决一些冲突,或者你会处于一个不完整的状态。

问题一般多一种解决方法。我会尽量提供一些。

1。樱桃采摘

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

创建一个分支,其中 master 个分支点:git checkout -b topic master

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

樱桃采摘提交 Egit 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)

Interactive rebase dev 分支到 master 分支并移动 E commit at before C commit: 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 B D 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)