聊下gitrebase-i-创新互联

在使用git开发的时候经常会面临一个常见的问题。多个commit 需要合并为一个完整的commit提交。

为砀山等地区用户提供了全套网页设计制作服务,及砀山网站建设行业解决方案。主营业务为做网站、网站设计、砀山网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

我们先说第一个合并多个commit为一个完整的commit

我先基于develop主分支拉出一个功能分支(每个人和每个公司对分支的管理都不太一样,这里不需要太纠结。)。这里的develop是开发主分支,所有的开发功能代码都需要回归到这个develop分支中去。

git branch -a –vv

聊下 git rebase -i

develop_fixbug_p_w_picpathprint 分支是我基于远程develop分支拉出来的开发分支,我会基于这个分支来fix一些bug。我们分别看下develop、develop_fixbug_p_w_picpathprint commit log。

git checkout develop

git log

聊下 git rebase -i

git checkout develop_fixbug_p_w_picpathprint

git log

聊下 git rebase -i

develop_fixbug_p_w_picpathprint的commit log是和devleop commit log 一模一样。我们现在切换到develop_fixbug_p_w_picpathprint进行一些操作。

添加一个1.txt文件,然后git add . ,git commit –m’add 1.txt’。

再添加一个2.txt 文件,然后git add . ,git commit –m’add 2.txt’。
聊下 git rebase -i

现在develop_fixbug_p_w_picpathprint分支里有两个commit。这两个commit都是为了fix当前这个bug而做的两个提交。现在我们要合并代码上主develop分支。总不能把这两个commit直接提交上去,这里还好只有两个commit,但是一般项目开发周期两个星期的话,你起码有十几个commit。那这样提交上去之后就很难管理和跟踪。(我以前都是这样干的,现在发现这样不好跟踪管理。)

那么我们如何完成这个合并commit尼,就需要用到git rebase 命令。

先来解释下git rebase 。你其实可以把它理解成是“重新设置基线”,将你的当前分支重新设置开始点。这个时候才能知道你当前分支于你需要比较的分支之间的差异。

比如,develop_fixbug_p_w_picpathprint分支是来自develop分支,那么从test commit开始后面我们基本上都是各自发展,现在在develop_fixbug_p_w_picpathprint分支上有两个commit,我们需要找一个基准,这个基准就是git需要找到哪些是你后来提交的commmit,总的有个参照。

git reabse –i develop

聊下 git rebase -i

git rebase 立马知道develop与develop_fixbug_p_w_picpathprint之间的差异。因为我们是基于develop设置rebase的。git rebase –i ,这里的”-i“是指交互模式。就是说你可以干预rebase这个事务的过程,包括设置commit message,暂停commit等等。

这里我们要求很简单就是合并之前的commit且重新设置commit message。

我们设置第二个”pick 657a291 add 2.txt” 为” s 657a291 add 2.txt”这里的s就是squash命令的简写。

聊下 git rebase -i

跳出来了一个临时文件,最上面是两行commit message。我们修改下这个总体的commit message。

聊下 git rebase -i

删除之前的两条message(ESC dd),设置一总的message 然后保存退出。(ESC wq)

聊下 git rebase -i

我们查看下log。git log

聊下 git rebase -i

是不是没有了之前的两个commit。

原理很简单:rebase需要基于一个分支来设置你当前的分支的基线,这基线就是当前分支的开始时间轴向后移动到最新的跟踪分支的最后面,这样你的当前分支就是最新的跟踪分支。这里的操作是基于文件事务处理的,所以你不用怕中间失败会影响文件的一致性。在中间的过程中你可以随时取消rebase 事务。git rebase –abort

在进入git rebase –i 交互模式,你可以做的事情就很多了,可以设置edit 编辑commit 内容,可以让他暂停commit操作。等等。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章名称:聊下gitrebase-i-创新互联
地址分享:http://azwzsj.com/article/cojohp.html