以下是我通常面临的情况:
您在master
或design
上有一组提交,我希望将其置于production
分支之上。
我倾向于创建一个新的分支,其基数为production
,然后选择这些提交并将其合并到production
然后当我将master
合并到生产中时,我面临合并冲突,因为即使更改是相同的,但由于樱桃选择而被注册为不同的提交。
我找到了一些解决方法,所有这些都是费力的,可以称之为“黑客”。
Altho'我没有做太多的变基,我相信这也会创建一个新的提交哈希。
我应该在我喜欢的地方使用变基。与此相比还有什么其他优势。
答案 0 :(得分:4)
您应该在生产之上设置rebase --interactive
您的设计分支,其中:
-x--x--x1--x--x2 (design) \ p--p (production)
x1和x2需要包含在生产中:
git checkout design
git rebase --interactive production
-x
\
p--p (production)
\
x1'-x2'--x'--x' (design)
然后:
git checkout production
git merge x2'
-x
\
p--p--x1'--x2' (production)
\
x'--x' (design)
允许你:
Lakshman Prasad补充道:
我在大部分时间结束时推动更改。所以并没有真正帮助那么多。对于推送的主分支,您的答案将如何变化
我会这样做,但是只为操作创建了一个私有分支:
git checkout master
git checkout -b master-private
-x--x--x1--x--x2 (master, master-private) \ p--p (production)
,然后是rebase,这次是私人分支(即你不会推动的分支)。
git rebase --interactive production
-x--x--x1--x--x2 (master)
\
p--p (production)
\
x1'-x2'--x'--x' (master-private)
然后:
git checkout production
git merge x2'
-x--x--x1--x--x2 (master)
\
p--p--x1'--x2' (production)
\
x'--x' (master-private)
master
不会从提交重新排序中获益(使用更合理的顺序),但至少可以随时推送master
。
production
仍然可以包含它所需要的内容
如果master
的后续提交具有相同的问题(某些问题需要包含在production
中,其他问题将在稍后进行),我会:
master-private
(我们并不关心那些x',来自master的x提交副本)master-private
分支
rebase --interactive
(除了master-private
分支的第一次提交,因为那些需要集成在production
分支中) -x--x--x1--x--x2--x--x3--x (master) \ p--p--x1'--x2'--x3' (production) | \ | x''--x'' (master-private) \ x'..x' (old x' from the first master-private)