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

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

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

但是 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 页面都可以。

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值