这个目标是将您所有分散的提交重组为更有意义的提交,以简化代码审查。如果一次要对太多文件进行太多更改,则很难进行代码审查。如果您可以将按时间顺序创建的提交重新组织为主题提交,则代码复审过程会更容易(并且可能会在代码复审过程中漏出更少的错误)。
这个过度简化的示例并不是使用git进行更好的代码审查的唯一策略。这就是我这样做的方式,它激发了其他人去思考如何使代码审查和git历史更容易/更好。
这也从教学上证明了重新设置的强大功能。
本示例假定您了解交互式重新基准化。
您正在从master进行功能分支
您的功能具有三个主要层:前端,后端,数据库
在功能分支上进行了大量提交。每个提交一次触及多层
您想要(最后)分支中只有三个提交
一个包含所有前端更改的
一个包含所有后端更改的
一个包含所有数据库更改
我们将按时间顺序将提交更改为“主题”提交。
首先,将所有提交分成多个较小的提交-每个提交一次仅包含一个主题(在我们的示例中,主题是前端,后端,数据库更改)
然后将我们的主题提交重新排序,并将它们“压缩”为单个主题提交
$ git log --oneline master.. 975430b db adding works:db.sqllogic.rb 3702650 trying to allow adding todo items:page.htmllogic.rb 43b075a first draft:page.htmland db.sql $ git rebase -i master
这将显示在文本编辑器中:
pick 43b075a first draft:page.htmland db.sql pick 3702650 trying to allow adding todo items:page.htmllogic.rb pick 975430b db adding works:db.sqllogic.rb
更改为此:
e 43b075a first draft:page.htmland db.sql e 3702650 trying to allow adding todo items:page.htmllogic.rb e 975430b db adding works:db.sqllogic.rb
然后git将一次应用一次提交。每次提交后,都会显示提示,然后您可以执行以下操作:
Stopped at 43b075a92a952faf999e76c4e4d7fa0f44576579... first draft:page.htmland db.sql You can amend the commit now, with git commit --amend Once you are satisfied with your changes, run git rebase --continue $ git status rebase in progress; onto 4975ae9 You are currently editing a commit while rebasing branch 'feature' on '4975ae9'. (use "git commit --amend" to amend the current commit) (use "git rebase --continue" once you are satisfied with your changes) nothing to commit, working directory clean $ git reset HEAD^ #This 'uncommits' all the changes in this commit. $ git status -s M db.sql M page.html $ git adddb.sql #now we will create the smaller topical commits $ git commit -m "first draft: db.sql" $ git add page.html $ git commit -m "first draft: page.html" $ git rebase --continue
然后,您将对每个提交重复这些步骤。最后,您将获得:
$ git log --oneline 0309336 db adding works: logic.rb 06f81c9 db adding works: db.sql 3264de2 adding todo items: page.html 675a02b adding todo items: logic.rb 272c674 first draft: page.html 08c275d first draft: db.sql
现在我们再运行一次rebase来重新排序和压扁:
$ git rebase -i master
这将显示在文本编辑器中:
pick 08c275d first draft: db.sql pick 272c674 first draft: page.html pick 675a02b adding todo items: logic.rb pick 3264de2 adding todo items: page.html pick 06f81c9 db adding works: db.sql pick 0309336 db adding works: logic.rb
更改为此:
pick 08c275d first draft: db.sql s 06f81c9 db adding works: db.sql pick 675a02b adding todo items: logic.rb s 0309336 db adding works: logic.rb pick 272c674 first draft: page.html s 3264de2 adding todo items: page.html
注意:请确保您告诉git rebase按时间顺序提交/压缩较小的主题提交。否则,您可能会有错误的不必要的合并冲突要处理。
说完该交互式基础后,您将获得:
$ git log --oneline master.. 74bdd5f adding todos: GUI layer e8d8f7e adding todos: business logic layer 121c578 adding todos: DB layer
现在,您已将按时间顺序的提交重新设置为主题提交。在现实生活中,您可能不需要每次都执行此操作,但是当您想要或需要执行此操作时,现在可以。另外,希望您了解了有关git rebase的更多信息。
官网:https://haomo-tech.com 作者:胡小根 版本:v0.0.1 代码审查要素: 流程 规范 版本命名规范 目录结构规范 代码规范 内容 工程结构 版本管理 代码质量 领域驱动设计 设计模式 SOLID原则 工具 1 审查目的 保证项目质量 传授编程经验 2 审查工具 商用 Jetbrains Upsource 公司采用的便是此工具 Atlassian Crucible 免费
1 使用 Upsource 是由 jetbrains 于 2014 年出品的一个进行 Code Review 的工具, 支持自动化的代码审查, 代码视察, 团队协作等多功能的一个软件. 它能够您和您的团队创建浏览源代码库,分享,讨论和审查代码。 1.1 安装 毫末科技Upsource平台 左上角点击IDE->Preferences->Plugins->Install JerBrains Plugi
如果您以前用过 Subversion, Mercurial 会让你感觉很困惑. 这篇教程将介绍 Mercurial 工作方式最大的区别. 如果你从没接触过 Subversion, 可以直接跳过本章. 重新审视 Subversion 我们公司的程序员们决定用 Mercurial 替换掉 Subversion, 老兄, 你把我搞糊涂了. 最初, 我提出了各种愚蠢的观点来反对迁移. “我们应当把版本库放
这个部分是关于熟悉应用程序编译为本地代码时显现的漏洞。对一门编译语言编写应用程序时的精准和完整理解,在没有学习编译器怎样转换源代码为机器语言和处理器怎么执行代码前是无法达到的。一种简单的获得这些转换经验的方式是通过逆向工程你自己的代码或源码可见的项目。在这个部分结束时你将会识别用诸如C和C++编译语言编写的常见漏洞。 大型软件包由于使用第三方软件库导致漏洞普遍存在。常见的例子包括像libxml、l
在上一篇文章中,已经了解基本编辑,了解Vim的其他一些编辑功能。 在本节中,将讨论以下主体内容 - 缓冲 交换文件 剪切,复制,删除,粘贴操作 撤消和重做操作 缓冲 缓冲区是Vim使用的临时内存。 当在编辑器中打开文件时,Vim从磁盘驱动器加载其内容。 每当编辑文件时,这些内容都存储在内存(RAM)中,实际上是从缓冲区编辑文件。 当完成编辑并保存文件,那时只将缓冲区内容传输到适当的文件。 交换 交
针对项目的每一次Pull Request就相当于一次代码评审,评审以讨论的形式显示在Pull Request中。 在Pull Request中还能够看到对应的提交(一个或多个),并可以直接针对提交进行代码评注。对于采用集中式协同的项目,即使较少使用 Pull Request,也同样可以使用代码评注。代码评注会触发通知邮件给项目的开发者。 代码评注有两种形式,一种是针对整个提交的评注,另外一种是对代