如何仅将一个提交合并到 master 而不是分支的所有提交?
How to merge only one commit to master and not all commits of a branch?
我有两个分支,名为 dev
和 master
。当前提交如下所示:
dev master
--- ------
A A
B B
C
D
E
现在我只想合并提交 E
到分支 master
。所以这就是预期的结果:
dev master
--- ------
A A
B B
C E
D
E
知道我该怎么做吗?
此外,我应该如何设法合并提交 C
、D
之后到分支 master
以实现完全同步。
TL;DR
首先,E
不应依赖于 C
或 D
。否则,你可能会不得不解决一些冲突,或者你会处于一个不完整的状态。
问题一般多一种解决方法。我会尽量提供一些。
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)
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)
我有两个分支,名为 dev
和 master
。当前提交如下所示:
dev master
--- ------
A A
B B
C
D
E
现在我只想合并提交 E
到分支 master
。所以这就是预期的结果:
dev master
--- ------
A A
B B
C E
D
E
知道我该怎么做吗?
此外,我应该如何设法合并提交 C
、D
之后到分支 master
以实现完全同步。
TL;DR
首先,E
不应依赖于 C
或 D
。否则,你可能会不得不解决一些冲突,或者你会处于一个不完整的状态。
问题一般多一种解决方法。我会尽量提供一些。
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)
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)