上云无忧 > 文档中心 > 百度智能云代码托管 iCode 使用教程 - 用rebase得到线性历史
代码托管 iCode
百度智能云代码托管 iCode 使用教程 - 用rebase得到线性历史

文档简介:
本地工作: 一个任务用一个分支,可以提交多次。 git checkout -b 1-add-a-py vi a.py git add a.py git commit -m'add a.py' vi a.py git add a.py git commit -m'print hello world' push到服务器: git push origin HEAD:refs/for/master //评审系统中生成一条评审记录,评审的代码就是当前工作中的分支(HEAD)。本地分支1-add-a-py => 远端评审系统 => 远端master。 【百度智能云】效率云
*此产品及展示信息均由百度智能云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

本地工作

一个任务用一个分支,可以提交多次。

git checkout -b 1-add-a-py
vi a.py
git add a.py
git commit -m'add a.py'
vi a.py
git add a.py
git commit -m'print hello world'

push到服务器

git push origin HEAD:refs/for/master   //评审系统中生成一条评审记录,评审的代码就是当前工作中的分支(HEAD)。
本地分支1-add-a-py => 远端评审系统 => 远端master

第一个任务还在评审时,开始做第二个任务

git fetch
git checkout -b 2-add-b-py origin/master
vi b.py
git add b.py
git commit -m'add b.py'
git gpush origin master

看一下2个任务(分支),1-add-a-py产生了2个commits,2-add-b-py产生了1个commit

$ git lola
* ad11f1b - (HEAD -> 2-add-b-py) add b.py
* | * 6a14db7 - (1-add-a-py) say hello
* | * 6e8d6e2 - add a.py
* |/
* * 98cb99d - (origin/master, master)

我们可以反复的在1-add-a-py和2-add-b-py这2个分支上git commit和gpush,更新代码,直到达到提交准入的要求。

这个过程中,如果有人更新了远端的master,可能会跟我们的修改冲突。解决办法是在本地仓库先合并一次。

git checkout 1-add-a-py
git pull origin master
... 修改有冲突的文件 ...
git commit
git push origin HEAD:refs/for/master

提交远端master

最后,在网页上提交我们的2个任务

在评审网页上找到标题为add b.py和add b.py的这个2评审,点【合入】

提交是在远端服务器发生的,我们把更新pull回来看看

$ git checkout master
$ git pull
$ git lola
*   a5080bc - (HEAD -> master, origin/master) Merge changes from topic '1-add-a-py'
* |\
* | * 6a14db7 - (1-add-a-py) say hello
* | * 6e8d6e2 - add a.py
* * | ad11f1b - (2-add-b-py) add b.py
* |/
* * 98cb99d
* $ git branch -d 1-add-a-py 2-add-b-py #分支合入master时候就可以删掉了,下次有需要再新建

master已经更新了。百度效率云-DevOps自动合并了2个任务的分支。

保持线性历史(可选)

上面是基本的提交流程,容易上手,但是master历史会比较杂乱。有2类commits混在历史里面:

评审不通过的中间commit,如上面例子的6e8d6e2,它的质量是不合格的 Merge commit,如上面例子的a5080bc,它没有贡献任何代码,却让代码历史变成了2条支线,变复杂了 重演刚才的情景,回到我们2个任务的起点,使用下面的方法就能消除这2类不受欢迎的commits,得到一条线性历史的master。

$ git lola
* ad11f1b - (2-add-b-py) add b.py
* | * 6e8d6e2 - (HEAD -> 1-add-a-py) add a.py
* |/
* * 98cb99d - (origin/master, master)

用amend删除评审不通过的commit

先提交a.py,这次的目标是去掉中间版本。关键操作是commit --amend,它把旧版commit(6e8d6e2 )给丢弃掉了。

$ git checkout 1-add-a-py
... vi ...
$ git add a.py
$ git commit --amend --no-edit #更新前一个commit的内容,保留提交日志不变
$ git lol 6e8d6e2
* 0c1cd2a - (HEAD -> 1-add-a-py) add a.py
* | * 6e8d6e2 - add a.py
* |/
* * 98cb99d (origin/master, master)

$ git push origin HEAD:refs/for/master

由于0c1cd2a是amend了6e8d6e2而产生的commit,提交日志不变,iCode通过识别2个commit提交日志中的Change-Id,知道他们属于一次评审的2个patch。

因此,我们就可以在百度效率云-DevOps网页上看到1-add-a-py所有amend的历史版本,同时又把这些历史版本都排除出master的历史。

我们可以一直amend 1-add-a-py直到满意为止,然后在网页上将它【合入】master。

用rebase去除merge commit

接下来再提交2-add-b-py,这次的目标是不要产生merge commit。关键操作是pull --rebase,

它将2-add-b-py的修改在1-add-a-py上重演了一次,避免了merge commit。

$ git checkout 2-add-b-py
$ git fetch
$ git lola
    * 0c1cd2a - (origin/master, master, 1-add-a-py) add a.py
    | * ad11f1b - (HEAD -> 2-add-b-py) add b.py
    |/
   * 98cb99d
$ git pull origin master --rebase
$ git lol
  * f2cbe49 - (HEAD -> 2-add-b-py) add b.py
  * 0c1cd2a - (master, 1-add-a-py) add a.py
  * 98cb99d
$ git push origin HEAD:refs/for/master

这样,就得到了线性的历史,2个commits,分别是1-add-a-py和2-add-by-py的修改;同时每一个commit都是一个逻辑完整的小功能。

相似文档
  • 1.下载代码库时的安装hook是干什么用的? 安装了此hook后,每次push会进行相应的检查,检查合格才能入库。 2.commit-msg是运行在客户端的一个git hook 它在每次git commit的时候自动往commit message末尾附加一行随机的change-id,如下图 【百度智能云】效率云
  • Q:git push HEAD:refs/for/master,长命令输入较麻烦,是否有更便捷办法? A:push时不能支持直接push到icode分支。必须执行下面命令发评审。 git push origin <当前分支>:refs/for/master 【百度智能云】效率云
  • 代码搜索是高效研发的重要基础,可以通过代码搜索实现代码复用,减少重复工作。 一、企业内搜索: 在项目列表页点击搜索框。 输入关键词 eg “to String”。 点击“搜索工具”展示。 点击文件名称浏览对应代码内容。 【百度智能云】效率云
  • iPipe简介: iPipe是百度效率云的持续交付流水线产品,你可以用它来自定义自动化交付流程,通过灵活配置软件交付过程中的各个阶段,来实现交付过程的自动化和可视化。 【百度智能云】效率云
  • 触发方式配置: 两者选择其一,可以按照需求自行配置。 说明: 1.代码库变更自动触发:监听到关联的代码库代码提交消息,自动触发此流水线。 备注:建议默认设置为自动触发,如果不设置,有代码提交,不会自动触发流水线;但是可以手动触发,详见第4条。 【百度智能云】效率云
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部