美文网首页
写日报老忘昨天做了啥,git log 朋友来帮忙

写日报老忘昨天做了啥,git log 朋友来帮忙

作者: 前端西瓜哥 | 来源:发表于2022-03-19 23:46 被阅读0次

    大家好,我是前端西瓜哥。

    大概上个月开始,我们公司就开始要求写每日简报了,要写昨天做的工作和今天要做的工作。作为一名打杂前端,做的需求杂而小,很容易忘记做过的一些工作,每次都要想半天,太难了。

    但是 git log 好朋友不会忘记我们的付出,我想我们可以找它帮帮忙。

    那我们赶紧来学习如何和 git log 沟通吧。

    (如果你熟悉 git log 的使用,直接跳到文末看实现)

    git log

    我们切换到项目的根目录下,输入 git log。

    这种不提供任何参数的命令,可以得到具体的代码历史提交信息

    commit 会从最近到最旧排序,每个 commit 会显示:

    1. 完整的哈希值。用于标识唯一 commit
    2. 作者名和作者邮箱
    3. 提交时间
    4. 提交说明(message)
    commit ca82a6dff817ec66f44342007202690a93763949
    Author: Scott Chacon <schacon@gee-mail.com>
    Date:   Mon Mar 17 21:52:11 2008 -0700
    
        changed the version number
    
    commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
    Author: Scott Chacon <schacon@gee-mail.com>
    Date:   Sat Mar 15 16:40:33 2008 -0700
    
        removed unnecessary test
    

    git log -p

    p 是补丁(patch)的意思,该命令会展示每个提交相对上一个提交,具体修改了什么内容

    如果只展示最近几个,可以加多个数字参数。如 git log -p -3 表示只展示最近三个提交的修改内容。

    git log --stat

    stat,是统计的意思。通过添加 --stat 参数,我们可以在默认 git log 的基础上,显示文件的改动统计。

    具体是统计每个文件新增了几行,删除了几行内容,这是对于文本文件来说的。

     README.md | 6 +++++-
     1 file changed, 5 insertions(+), 1 deletion(-)
    

    对于像是图片的二进制类型图片来说,则是会显示字节数的变化。

     0.jpg | Bin 20790 -> 96186 bytes
     1 file changed, 0 insertions(+), 0 deletions(-)
    

    git log --prety=oneline

    --pretty 参数可以用于自定义设置格式,git 为我们提供了很多可选项。

    • online:一行显示完整哈希值,以及提交说明。
    • short:显示哈希值、作者信息、提交说明。
    • ...

    可以使用的选项很多,这里就不一一讲解了,可以自己去看 git 的官方文档,然后自己在本地测试一波。

    我们常用的 git log --oneline 其实就是 git log --pretty=oneline --abbrev-commit 的简写。

    如果你想自定义 commit 内容格式,可以使用 format:<string>

    比如你只想知道每个 commit 的(1)相对时间(2)提交说明,可以这样写:

    git log --pretty=format:"%ar %s"
    

    其中 %ar(author date, relative)表示 commit 的相对时间,%s(subject)表示提交说明。

    更多占位符的说明可以看官方文档,这里不展开讲。

    git log --graph

    graph 选项可以让我们的 commint 以图形的方式去显示分支的分叉和合并变化。为了能够一个窗口范围能够看到更多的 commit,通常我们会配合上 --oneline。

    git log --oneline --graph
    

    git log --since=1.day

    --since 可以用来设置时间筛选项目,比如 2.weeks 只显示最近两周的提交,1.day 显示最近一天的提交,也可以是具体的一个事件戳,如 '2022-03-17'。

    限制范围的除了时间,还可以是作者(--author=<作者名>),提交说明(--grep="fix:")等。

    git log -S

    输出曾经删除或添加了特定字符串的所有 commit。这在我们在寻找一个函数的什么时候被删除和添加很有用。比如看看 getCurrentNode 函数是什么时候被删除的:

    git log -S getCurrentNode
    

    显示昨天所有的提交说明

    我们学了很多 git log 的选项的使用,其中的一些用法正好可以用来实现我们的部分需求。

    git log --since=1.day --author="watermelon" --pretty=format:"%ad %s" --date=format:"%m/%d %H:%M" --all --no-merges
    
    • --since=1.day:限定一天内的提交
    • --author="watermelon":限定作者为你自己的名字,你也可以换成同事的名字,看看谁摸鱼更厉害。
    • --pretty=format:"%ad %s":只显示提交的绝对时间,以及提交说明。
    • --date=format:"%m/%d %H:%M":对绝对时间设置自定义格式,原来的时间太长了,长这个样子:Thu Mar 17 14:35:19 2022 +0800,所以我改自定义格式改短一点,变成:03/17 14:35
    • --all:范围扩展为所有的可通过 ref 访问的 commit。如果你在多个分支提交了修改,需要加上这个。
    • --no-merges:隐藏 merge 提交。因为 merge 的说明通常是无意义的。

    不过这行命令也太长了点,我们用 git alias 设置个短一点的别名:

    git config --global alias.done 'log --since=1.day --author="huanghao" --pretty=format:"%ad %s" --date=format:"%m/%d %H:%M" --all --no-merges'
    

    以后我们早上醒来,输入 git done,就能轻松愉快地知道自己昨天做了什么需求工作了。

    03/17 20:27 添加 index.html 文件
    03/17 20:26 初始化
    

    对了,还有周一早上醒来找上周五提交的情景,只要改为 --since-3.days,再配一个新的别名,比如 done3 就完事了。

    当然这里也有不太智能的地方,有时候我们偶尔想看看两天内之间的提交,或者自己在另一个项目中的名字又不同了,就需要在命令行上做修改。

    解决办法是有的,说一下思路。可以自己再写个 bash 脚本,接受时间范围参数,底层去调用 git 命令。时间范围不传的话,提供默认的 1.day。

    执行脚本时,先通过 git config --get user.name 取得当前 git 用户名,再将这个名字和传入的时间注入到刚才那个非常长的脚本里,就可以实现灵活输出了。

    这里读者朋友可以试着实现。

    结尾

    git log 的选项非常多,这里只是简单介绍了几个,更多复杂细节的选项可以看 git 文档,本地输入 git log --help 命令者访问 https://git-scm.com/docs/git-log 页面都可以。

    不过一些基本的选项就足够我们的日常工作,或者说我们更常使用的是一些图形化工具。

    我是每天写日报的前端西瓜哥,欢迎关注我。

    相关文章

      网友评论

          本文标题:写日报老忘昨天做了啥,git log 朋友来帮忙

          本文链接:https://www.haomeiwen.com/subject/whqodrtx.html