目前,在软件开发的协作中,Git 无疑是版本控制的王者。

而其中的 git log 命令,犹如一把强大的历史探寻之剑,能够帮助我们深入洞察项目的演进历程。

本篇将为大家整理解读几个实用的 git Log 技巧,让你的项目管理和代码审查工作如虎添翼。

1. 挖掘代码深处的历史变更

git log 具备按文件内容搜索提交的强大功能。

使用 git log -S "字符串" 命令,我们可以搜索提交历史中添加了特定字符串的提交(默认区分大小写)。

比如,我想看看我的代码中何时添加了class FadeVideo,可以使用如下命令:

$  git log -S 'class FadeVideo'
commit 045447e05a735850fe7eb8274d95f7499042fe98 (HEAD -> master, origin/master, origin/HEAD)
Author: wangyubin <linuxr@aliyun.com>
Date: Fri Dec 20 16:50:30 2024 +0800 add animations video fade

如果想要不区分大小写进行搜索,可以添加 -i 选项。

$  git log -i -S 'class fadevideo'
commit 045447e05a735850fe7eb8274d95f7499042fe98 (HEAD -> master, origin/master, origin/HEAD)
Author: wangyubin <linuxr@aliyun.com>
Date: Fri Dec 20 16:50:30 2024 +0800 add animations video fade $ git log -S 'class fadevideo' # 没有-i选项,搜索不到结果

结合 -p 选项,还能同时查看这些提交的差异变化。

$  git log -i -S 'class fadevideo' -p
commit 045447e05a735850fe7eb8274d95f7499042fe98 (HEAD -> master, origin/master, origin/HEAD)
Author: wangyubin <linuxr@aliyun.com>
Date: Fri Dec 20 16:50:30 2024 +0800 add animations video fade diff --git a/short_videos/animations/fade.py b/short_videos/animations/fade.py
new file mode 100644
index 0000000..e924471
--- /dev/null
+++ b/short_videos/animations/fade.py
@@ -0,0 +1,268 @@
+titles = [
+ "基本使用",
+ "FadeIn的shift参数",
+ "FadeIn的target_position参数",
+ "FadeOut的scale参数",
+]
+codes = [
+ """# 创建一个圆形

这在我们想要追溯某个特定代码片段或函数是在何时被引入项目,以及在后续提交中如何被修改时,发挥着不可替代的作用,能够帮助我们深入理解代码的演变逻辑。

2. 深入代码差异的提交详情

仅仅知道提交的存在是不够的,很多时候我们需要了解每次提交到底对代码做了哪些具体的更改。

git log -p 命令在显示提交日志的同时,还会展示每次提交所带来的差异变化。

$  git log -p
commit 045447e05a735850fe7eb8274d95f7499042fe98 (HEAD -> master, origin/master, origin/HEAD)
Author: wangyubin <linuxr@aliyun.com>
Date: Fri Dec 20 16:50:30 2024 +0800 add animations video fade diff --git a/main.py b/main.py
index e15c8a1..e340db1 100644
--- a/main.py
+++ b/main.py
@@ -59,6 +59,7 @@ def animations_help():
params = {
"text": "文字的创建与销毁",
"graph": "图形的创建与销毁",
+ "fade": "淡入淡出",
}

这对于代码审查、问题排查以及理解项目功能的逐步演进至关重要。

比如,当发现某个功能出现异常时,通过 git log -p 查看相关提交的差异,能够快速定位到是哪个提交引入了问题,以及具体的代码改动之处,从而高效地进行修复。

3. 对比分支开发进度

在多人协作开发或者多分支并行开发的场景下,经常需要比较不同分支之间的差异。

git log master..develop 命令就可以显示 develop 分支中存在但 master 分支中不存在的提交。

这在准备将某个分支的功能合并到主分支之前,或者想要了解不同分支的开发进度差异时非常有用。

比如,下面我的一个项目,比较其中两个分支的区别:

$  git branch
* collector
develop
master $ git log develop..collector
commit ee035a3ed6aa71d8650d4dc823be6a6045894e11 (HEAD -> collector, origin/collector)
Author: wangyubin <linuxr@aliyun.com>
Date: Sun Dec 1 10:11:11 2024 +0800 use poltly to display kline commit d8b65fad3beca572fa1e7d57fa90e5c9345e575f
Author: wangyubin <linuxr@aliyun.com>
Date: Sat Nov 30 00:55:49 2024 +0800 update kline utils

4. 简洁至上的提交概览

在查看项目提交历史时,有时候我们不需要冗长的详细信息,只希望快速了解每个提交的大致情况。

git log --oneline 就完美地满足了这一需求。它将每个提交压缩成一行,仅仅展示简短的提交哈希和提交消息。

这样一来,我们能够在有限的屏幕空间内迅速扫视众多提交,把握项目的主要更新脉络。

$  git log --oneline
ee035a3 (HEAD -> collector, origin/collector) use poltly to display kline
d8b65fa update kline utils
f3d749a update K线显示
540e2ef add k线查看
efaf17e update readme
30e672d add coin info utils
35cdd3e fix 数据采集改造后的错误
03f1626 fix 配置文件加载错误
a7e5c42 rework collector
5d69716 fix binance collector start time
8503533 rework binance collector
59cc2b6 add uv project manager
1f29fbf update binance api
924545c update 整体结构
... ...

5. 追踪特定文件的变更轨迹

当我们重点关注某个或某些文件的历史变化时,通过 git log <filename>的形式,我们可以过滤出对指定文件进行更改的提交。

如果需要同时查看多个文件的提交历史,只需像 git log file1 file2 file3 这样传递多个文件名即可。

$  git log .\config.py
commit 30e672d3e78c9fbc6198373940a464b8132a9b06
Author: wangyubin <linuxr@aliyun.com>
Date: Thu Nov 7 18:01:54 2024 +0800 add coin info utils commit a7e5c4271cad314460a1793c8c62aa93acd70077
Author: wangyubin <linuxr@aliyun.com>
Date: Tue Oct 29 11:57:20 2024 +0800 rework collector commit 5d697169b687ea02ad4723e74fbc3052e033a6c4
Author: wangyubin <linuxr@aliyun.com>
Date: Tue Oct 29 11:33:37 2024 +0800 fix binance collector start time

6. 基于关键字的提交搜索

有时候,我们只记得提交消息中的某个关键字或短语,想要快速找到相关的提交。

使用 git log --grep="模式" 可以按照指定模式(默认区分大小写)过滤提交,

如果不希望区分大小写,可以使用 git log -i --grep="模式"

这在项目规模较大,提交数量众多的情况下,能够帮助我们迅速定位到与特定任务、功能或问题相关的提交记录,极大地提高了代码查找和问题追溯的速度。

$  git log --grep "数据采集"
commit 35cdd3e75933c1a99431ea86d0625faff49f1c16
Author: wangyubin <linuxr@aliyun.com>
Date: Thu Oct 31 14:41:46 2024 +0800 fix 数据采集改造后的错误 commit 7edf14cf0cc4478d422dd752d32de146bedefa6f
Author: wangyubin <linuxr@aliyun.com>
Date: Mon May 27 10:12:08 2024 +0800 update 数据采集

7. 聚焦特定开发者的工作成果

在团队协作开发中,了解每个成员的贡献情况是非常有意义的。

git log --author="作者名" 命令允许我们按照作者来过滤提交。

git 在此处是按照正则表达式模式进行过滤的,这意味着不需要精确的名称匹配,也不区分大小写。

$  git log --author="linuxr"
commit ee035a3ed6aa71d8650d4dc823be6a6045894e11 (HEAD -> collector, origin/collector)
Author: wangyubin <linuxr@aliyun.com>
Date: Sun Dec 1 10:11:11 2024 +0800 use poltly to display kline commit d8b65fad3beca572fa1e7d57fa90e5c9345e575f
Author: wangyubin <linuxr@aliyun.com>
Date: Sat Nov 30 00:55:49 2024 +0800 update kline utils commit f3d749a335c91385cd6443572a0e5082d05734d1
Author: wangyubin <linuxr@aliyun.com>
Date: Fri Nov 29 18:51:41 2024 +0800 update K线显示 ... ...

8. 突出项目的合并节点

在复杂的项目开发中,分支合并是常见的操作。

git log --merges 命令能够让我们专注于查看当前分支中的合并提交。

这些合并提交往往代表着不同分支开发成果的整合,对于理解项目的整体架构整合和功能合并过程具有重要意义。

$  git log --merges
commit 97078ccd1545a4d5dc73eac4f92487607ee93010 (origin/master, master)
Merge: 49a457c e49da8b
Author: wangyubin <linuxr@aliyun.com>
Date: Sun Oct 13 20:50:34 2024 +0800 Merge branch 'master' of gitee.com:wangyubin/b_st_middle commit b29438b16351552a54c8e4fbe477154059d2dcd5
Merge: 9e4a212 366875c
Author: wangyubin <linuxr@aliyun.com>
Date: Mon May 27 10:52:28 2024 +0800 Merge branch 'master' of gitee.com:wangyubin/b_st_middle

9. 精准定位特定时段的变更

在项目开发过程中,我们常常需要关注特定时间段内的代码改动,git log 提供了强大的时间过滤功能。

比如,当我们想要查看 2024 年 6 月 1 日之后的提交时,可以使用 git log --after="2024-06-01" 命令。

若要进一步缩小范围,查看 2024 年 6 月 1 日至 6 月 25 日之间的提交,只需执行 git log --after="2024-06-01" --before="2024-06-25"

而且,它还支持诸如 "yesterday"、"today"、"10 day ago" 等便捷的日期格式,这使得我们能够根据实际需求灵活地筛选出所需时间段的提交记录。

$  git log --after="2024-06-01" --before="2024-06-25" --oneline
ff5b0b1 add example single string math tex
f3aba71 优化一些场景的切换
f1ca6c7 add integer video
c3a407f 生成视频的结构
db02c64 add main for videos
3358093 add bulleted list example
dd48bd1 add title example
bb3e513 add infra and end page
e36946a add integer example $ git log --after "10 days ago" --oneline
045447e (HEAD -> master, origin/master, origin/HEAD) add animations video fade
22a0d9f add animations rotate example
f05b8d1 add animation graph video
2664733 add animations graph video
93cf0cf add animation indication example
d9bab37 add animations video text
9462253 add animation grow example
784d4f9 add video Polyhedron
c372485 add animation fade example

10. 个性化的提交展示

最后一个技巧是关于自定义 git log 的日志消息格式。

使用 git log --pretty=format:"格式字符串",我们可以根据自己的需求灵活定制日志的显示格式。

比如,git log --pretty=format:"%Cred%an - %ar%n %Cblue %h -%Cgreen %s %n"

通过这种方式,我们可以选择显示提交作者、提交时间、提交哈希以及提交消息等不同的信息,并对其进行颜色标记等格式化处理,使日志信息更加清晰易读,满足不同场景下对提交信息展示的个性化要求。

11. 总结

git log的参数其实有很多,参考:https://git-scm.com/docs/git-log

本篇只是总结了一些平时使用的几个技巧,如果大家有其他更好的查看日志的技巧,欢迎交流。

解锁 Git Log 更多实用技巧的更多相关文章

  1. 开发工具IDE从入门到爱不释手(五)更多实用操作

    更多实用技巧 Tabs分屏和独立 日志链接及浏览器 设置浏览器 本地修改历史 三秒钟不操作,自动保存一个版本 右键--Local History--Show History 查看方法调用情况 按住方法 ...

  2. git log 常用命令及技巧

    git log常用命令以及技巧 1.git log 如果不带任何参数,它会列出所有历史记录,最近的排在最上方,显示提交对象的哈希值,作者.提交日期.和提交说明.如果记录过多,则按Page Up.Pag ...

  3. git 实用技巧

    一.git 常用操作 1.1 // 该方法会显示某次提交的所有更改 git log --pretty=oneline 文件名 git show 356f6def9d3fb7f3b9032ff5aa4b ...

  4. 实用的git log用法

    git log可以很方便地查看日志,可以根据自己需要,将日志按照特定格式显示,或者输出某种格式. 最原始的输出样式: $ git log commit ca82a6dff817ec66f4434200 ...

  5. 12个git实战建议和技巧

    摘要:git无疑是现在最热门的版本控制工具,而且正在进一步侵占SVN以及CVS的市场.本文作者从国外技术问答社区Stack Overflow整理的12个很实用的git使用技巧和建议,希望对你有帮助. ...

  6. c++实用技巧

    原地址:http://www.cnblogs.com/easymind223/articles/2576904.html 晚上的时间总是习惯性的在cnblogs逛街,今天又看到了好文章,其c++味道浓 ...

  7. git log 高级用法

    转自:https://github.com/geeeeeeeeek/git-recipes/wiki/5.3-Git-log%E9%AB%98%E7%BA%A7%E7%94%A8%E6%B3%95 内 ...

  8. Hbuilder实用技巧(转)

    Hbuilder实用技巧 原创 2016年05月19日 10:25:42 标签: hbuilder 操作 16551 1. Q:怎么实现代码追踪? A:在编辑代码时经常会出现需要跳转到引用文件或者变量 ...

  9. Git log高级用法

    格式化Log输出 首先,这篇文章会展示几种git log格式化输出的例子.大多数例子只是通过标记向git log请求或多或少的信息. 如果你不喜欢默认的git log格式,你可以用git config ...

  10. Vim 实用技术,第 1 部分: 实用技巧(转)

    原文链接:http://blog.jobbole.com/20604/ 0. Vim 简介 作为开源世界最重要的编辑器之一(另一个是 Emacs),Vim 以其强大的功能和可定制能力被众多开发者所喜爱 ...

随机推荐

  1. LeetCode 730. Count Different Palindromic Subsequences (区间DP)

    题意 给一个字符串S,求它所有子序列中不同非空回文串的数量.字符串由 'a' 'b' 'c' 'd' 四个字母组成. 由于题目要求的是不同回文串. abba 的回文串子序列为 a,b,aba,abba ...

  2. 一款基于Uniapp开发的开源低代码平台

    rtvue-lowcode低代码开发平台 rtvue-lowcode一款基于uniapp框架和uview组件库的低代码开发平台,项目提供可视化拖拽编辑器,采用MIT开源协议,适用于app.小程序等项目 ...

  3. 利用3Dslice提取血管中心线

    1.首先进入官网下载你需要的版本.你也可以安装老版本,我已经用红色框框出来了. 2.开始安装,等个几十秒钟就ok了. 3.当然要实现提取中心线,还需要 VMTK 这个玩意, 打开应用,找到 insta ...

  4. 对抗生成网络(GAN)简单介绍

    对抗生成网络主要由生成网络和判别网络构成,GAN在图像领域使用较多.利用生成网络生成假的图像,然后利用判别器是否能判断该图像是假的. 1.用于医学图像分割,一般我们可以利用一个U-Net网络生成分割结 ...

  5. vue 的常用指令以及作用 ·

    1. v-model 多用于表单元素实现双向数据绑定(同 angular 中的 ng-model) 2. v-for 格式: v-for="字段名 in(of) 数组 json" ...

  6. js的宏任务和微任务有哪些,是怎么执行的 ?

    事件循环有宏任务和微任务: 宏任务所处的队列就是宏任务队列,队列可以有多个,第一个队列只有一个任务就是执行主线程的js代码,剩余队列任务有setTimeout setInterval  :微任务所处的 ...

  7. apisix~按域名进行请求转发

    路由route 路由(Route)是请求的入口点,它定义了客户端请求与服务之间的匹配规则.路由可以与服务(Service).上游(Upstream)关联,一个服务可对应一组路由,一个路由可以对应一个上 ...

  8. 常见CDN绕过姿势

    CDN绕过: 1.子域名 子域名查询: 在一些网站中有可能只加速了主站,而一些其它子域名和主站在同一个C段或者同服务器 利用子域名查询工具: http://tool.chinaz.com/subdom ...

  9. JetBrains IDEs 软件全破解

    JetBrains IDE相关产品是一系列专为不同编程语言和平台设计的智能开发工具,它们可以帮助开发者提高效率,编写高质量的代码,和享受编程的乐趣.为当世最有影响力的IDE之一. JB 软件分为都分为 ...

  10. Machine Learning Week_8 K-means And PCA

    目录 1 K-means 1.1 Unsupervised Learning:Introduction 1.2 K-Means Algorithm 1.2.1 k-means algorithm 1. ...