我的团队希望我为项目中的每个逻辑更改创建一个单独的拉取请求(使用Bitbucket),以便轻松审核和批准。
我需要实现功能A,B和C.
我创建了分支A,实现了第一个更改,并为A - > master创建了一个pull请求。现在,在等待审核和批准的同时,我想开展下一个功能。我创建了一个派生自A的分支B.
master
\
A
\
B
现在我也完成了B的实施,并希望为我的团队创建另一个拉取请求进行审核。如果我这样做(B - >主人)它会向我显示A和B的两次提交(当然这是有道理的),但我不希望我的团队再次审阅A.
我知道我可以发出第二个拉取请求B - > A但是如果A合并到主控并且在B合并到A之后被删除,那么这个拉取请求会发生什么?
如何让包含A和B更改但却不相交的并行拉取请求?
答案 0 :(得分:1)
为每个功能制作分支。这些被称为功能分支。如果你需要,分支另一个分支。 git checkout feature/1; git branch feature/2
。
D - E - F [feature/3]
/
A - B - C [master]
\
G - H [feature/1]
\
I - J [feature/2]
您可以同时提交feature/2
和feature/1
,只要您明确feature/2
取决于feature/1
。
我知道我可以发出第二个拉取请求B - > A但是如果A合并到主控并且在B合并到A之后被删除,那么这个拉取请求会发生什么?
如果修改了feature/1
但尚未合并,则应使用feature/2
在git checkout feature/2; git rebase feature/1
之上重新定位 D - E - F [feature/3]
/
A - B - C [master]
\
G - H - K - L [feature/1]
\
I - J [feature/2]
。这看起来像这样,K和L是新版本。
git checkout feature/2; git rebase feature/1
然后在 D - E - F [feature/3]
/
A - B - C [master]
\
G - H - K - L [feature/1]
\ \
I - J I1 - J1 [feature/2]
之后你就拥有了这个:
git push --force
然后在功能/ 2上git reflog
。请注意,在rebase之后,原始更改仍然存在于本地存储库中。他们最终会被垃圾收集,但同时如果你犯了错误,你可以通过检查feature/1
来取回它们。
合并和删除 D - E - F [feature/3]
/
A - B - C ------------- M [master]
\ /
G - H - K - L
\
I1 - J1 [feature/2]
后的相同程序(顺便说一句,您仍然拥有您必须删除的本地分支)。删除分支只会删除标签,分支仍在那里(除非他们"合并"通过变基或挤压)。你会有这个。
feature/2
您应该使用git rebase master
将 D - E - F [feature/3]
/
A - B - C ------------- M [master]
\ / \
G - H - K - L I2 - J2 [feature/2]
重新加入主页。
git push --force
然后feature/3
。
同样,如果feature/3
仍处于审核阶段,您应该将master
重新定位到feature/1
以确保其仍然有效并使集成商的工作更轻松。
如果所有这些看起来有点复杂,请提交feature/2
并等到它被接受并合并后提交feature/2
。你仍然应该做最后一点,将master
重新定义到scala.io.Source.fromString(string).getLines.toList
。
答案 1 :(得分:0)
所以,你有一个主分支。
现在,由于B是从A创建的,因此它也将具有来自A的提交。 即使A合并到主分支并且分支A的拉取请求将关闭,分支A仍然存在。