2021-03-27
Git
0

目录

fast-forwards产生的原因和解决方案
操作分支介绍: feature/ccz/page(个人开发分支),master(主分支名称)
防止rebase产生的fast-forwards
千万不要在公共分支上面rebase其他分支代码

Git Rebase 是一种强大的版本控制工具,它可以帮助我们整理分支历史、消除不必要的合并节点,从而使代码仓库更加清晰和易于维护。然而,在使用 Git Rebase 过程中,我们也经常会遇到各种问题和踩坑,比如合并冲突、历史改写、代码丢失等。

在本文中,我们将分享一些我们在使用 Git Rebase 过程中遇到的问题和踩坑经验,希望能帮助读者更好地理解和应用 Git Rebase,避免一些常见的错误和问题。

fast-forwards产生的原因和解决方案

操作分支介绍: feature/ccz/page(个人开发分支),master(主分支名称)

如果当前分支,是个人开发分支,比如feature/ccz/page, 如果我在该分支基础上每天进行一次commit,并且push提交到远程,之后我在rebase master, 这个时候,如果master上有新的提交,那么我们在rebase之后,是无法再次push到个人开发分支feature/ccz/page, 因为此时中间夹杂着master那次新提交(rebase会将当前分支的commit放到基底分支之后), 此时,当你进行push feature/ccz/page时,将会提示fast-forwards(快进)。 解决办法:个人开发分支的本地git和远程git不一样的事实已无法更改 1.不建议用本地分支merge远程分支(违背了使用rebase的初衷,且如果上次rebase有冲突,那么本次merge也会存在冲突,你将解决两次一模一样的冲突) 2.git push -f,强制覆盖远程分支。 如果当前分支是多人开发,使用--force-with-lease 3.删除远程分支后,在进行提交,和2类似。如果使用rebase,建议每次合并后,删除远程的个人开发分支 4.git push origin feature/ccz/page

,推送当前分支到其他远程分支(之后的开发也只能在other分支上面开发,因为本地和远程git已经不一致了)

防止rebase产生的fast-forwards

那么我们如何防止,个人开发分支feature/ccz/page push到远程之后,出现fast-forwards。 1.commit代码之后,不要立马push到个人开发分支,先进行rebase master,在进行push个人开发分支。 2.如果你当前的任务,需要三天才能完成,并且你不希望将功能不完整的代码,合并到主分支。 在每天工作完成之后,进行一次commit,此时不要将个人开发分支推送到远程。在五天后,你完成了该任务,将本地的五个commit 进行rebase master。之后进行push到个人开发分支,也不会发生fast-forwards 3.接着第2个事例讲,可能你需要在每次commit之后,push到个人开发分支, 因为这可能是公司的硬性规定,需要你们每天都要提交代码到远程,又或许此时你电脑极不稳定,很有可能在第二天开机之后蓝屏, 那么我们就需要在commit后,进行push。 在五天之后,我们进行rebase master,如果此时很凑巧master上面没有新的提交,那么在rebase之后,push 到个人开发分支将不会有任何问题。当然这属于异想天开,因为一个成熟的多人开发团队,五天内都不往主分支合并代码,这是多么可怕的事情。此时发生fast-forwards的问题,参照1.fast-forwards产生的原因和解决方案

千万不要在公共分支上面rebase其他分支代码

千万不要在主分支上面去rebase其他分支的代码,因为这将带来不可预支的风险。 假设A,B都在develop分支上面开发,本地develop无论你是通过merge又或者rebase到远程develop分支都没有任何关系。 因为你没有违反上面的约定,你们俩人相安无事的开发着。 但是在某一天,B同学突然心血来潮,以develop分支为基础,新开feature/2B分支,当他在新开的分支完成工作以后,切到了develop分支,rebase自己的feature/2B分支,如果此时develop没有新的提交,那么很好,不会出现问题。 如果一旦有新的提交,那么整个流程就会变得非常麻烦,以feature/2B为基底分支,会将develop分支新的提交放到feature/2B之后。 此时你将无法直接进行push主分支,你只能通过git push --force-with-lease去解决 你以为这样就结束了吗,A同学又完成了一个任务,准备进行一次提交,却发现无法提交。因为他的本地代码里面并没有夹着feature/2B分支,他需要去合并远程分支后,才能进行提交。当然这不是影响最大的,因为你强制提交分支,覆盖远程分支,那么远程分支将会丢弃某些提交,当A想在合并后的代码,去寻找这些提交时,他将无从下手,他将抱怨你,憎恨你。 如果你将rebase用于公共分支,并且用它去做各种骚操作,相信我,你一定会被所有人嫌弃。

本文作者:BARM

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!