簡體   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