拉只做如果合并能够自动与没有冲突进行衍合的时候,该rebaseif善变扩展自动化的过程。 (如果存在冲突手动解决,不重订,让你准备做两个分支的手动合并)。这简化和线性化,当开发商在代码的不同部分正在工作的历史,尽管任何rebase才会抛离开这个世界的时候开发人员在做工作状态的一些信息。 我倾向于喜欢争执同意这个和这个 ,在一般情况下,垫底是不是一个好主意,但我觉得底垫,如果理念呼吁非冲突情况。 我在它的围栏,即使我知道,仍然有逻辑错误的风险时,改变代码的不同部位发生(和rebaseif扩展的作者已经到觉得这是一个坏主意。 )
最近,我通过一个复杂而痛苦平分去了,我认为有大量的在我们的仓库短枝合并的是其主要原因平分线没有辜负其隐含的O(LG n)的承诺。 我发现自己需要运行“平分--extend”很多次,伸展范围超出了合并,一次一对夫妇的变更的准备,从根本上让对开为O(n)。 我还发现它十分复杂,保持平分线是怎么回事的跟踪和了解,到目前为止我已经获得了什么样的信息,因为在看仓库的图表时,我不能跟着分支。
有没有更好的方法来使用对开(和来看待和理解修订历史记录),或者是我的权利,这一进程将是平滑的,如果我们有更多的rebaseif在开发中使用。 或者,你可以帮助我了解更多具体什么可以利用变基在非冲突情况下出了问题:是否足够可能引起的问题,应避免这种情况?
git的用户可能已经看到了陷阱:我更普遍(不仅仅是善变),因为我觉得rebaseif相匹配的更典型的git的工作流程标注这一点。
我认为答案很简单:你必须硬平分或危险垫底之间devide。
或者,介于两者之间:只有当它是不太可能的重订默默打破东西变基。 如果一个变基只涉及少数的变更,其额外的语义遥远到他们重建基础上的变化,它通常是安全的变基。
下面是一个例子,其中一个没有冲突的合并破裂的事情:
假设两个分支从这个内容的文件开始:
def foo(a):
# do
# something
# with a (an integer)
...
foo(4)
在分支A,此时更改为:
def foo(a):
# now this function is 10 times faster, but only work with positive integers
assert a > 0
# do
# something with
# with a
...
foo(4)
在分支B,它更改为:
def foo(a):
# do
# something
# with a (an integer)
...
foo(4)
...
foo(-1) # now we have a use case where we need to call foo with -1
在语义上,这两种编辑互相冲突。 然而,水银愉快地将它们合并没有冲突(在这两种情况下,重订时或做定期合并时):
def foo(a):
# now this function is 10 times faster, but only work with positive integers
assert a > 0
# do
# something with
# with a
...
foo(4)
...
foo(-1) # now we have a use case where we need to call foo with -1
合并的好处是,它允许以了解出现的问题在以后的某个点上,这样你就可以相应解决的事情。 衍合会扔掉你需要了解造成自动合并的错误信息。
反对的主要论点git rebase
似乎是一个哲学的一个围绕“失去的历史”,但如果我真的关心,我会做最后的构建步骤检入(或第一构建步骤来跟踪所有的构建失败呢!) 。
我不是特别熟悉的水银或平分(除了它有点像GIT),但在我的一个月和一个位与GIT我完全陷进去变基。 我也用git rebase -i --autosquash
和git add -p
很多 。
IME,有也没有底垫和合并之间相差太大,当涉及到固定的冲突-您链接到答案建议“rebaseif”是不好的,因为“如果”对合并是否进行没有冲突,而应该是条件空调的代码库是否建立并测试通过。
也许我的想法是在Git的设计本身存在弱点倾斜(它没有明确跟踪分支的历史,即子集的承诺,它的实际指向的),或者它只是我的工作(检查DIFF是理智的,它建立,虽然重订后承认,我不检查中间提交建)。
(旁白:对于个人项目,我常常想跟踪每个生成输出和相应的源快照的,但我还没有发现任何东西,这是很好的这样做。)