Git 在代码审查之前重新评估
示例
概要
这个目标是将您所有分散的提交重组为更有意义的提交,以简化代码审查。如果一次要对太多文件进行太多更改,则很难进行代码审查。如果您可以将按时间顺序创建的提交重新组织为主题提交,则代码复审过程会更容易(并且可能会在代码复审过程中漏出更少的错误)。
这个过度简化的示例并不是使用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
注意:请确保您告诉gitrebase按时间顺序提交/压缩较小的主题提交。否则,您可能会有错误的不必要的合并冲突要处理。
说完该交互式基础后,您将获得:
$ git log --oneline master.. 74bdd5f adding todos: GUI layer e8d8f7e adding todos: business logic layer 121c578 adding todos: DB layer
回顾
现在,您已将按时间顺序的提交重新设置为主题提交。在现实生活中,您可能不需要每次都执行此操作,但是当您想要或需要执行此操作时,现在可以。另外,希望您了解了有关gitrebase的更多信息。