git reflog 和 git log 的区别

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: git reflog 和 git log 的区别
  • git reflog
    可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作),
  • git log
    则不能察看已经删除了的commit记录

具体一个例子,假设有三个commit:

git st:
commit3: add test3.c
commit2: add test2.c
commit1: add test1.c

如果执行 git reset --hard HEAD~1 则删除了 commit3,如果发现删除错误了,需要恢复 commit3 就要使用

git reflog HEAD@{0}: HEAD~1: updating HEAD
63ee781 HEAD@{1}: commit: test3:q

63ee781 即是被删除了的 commit3,运行 git log 则没有这一行记录

可以使用 git reset --hard 63ee781 将红色记录删除,则恢复了cmmit3,运行git log后可以看到:

commit3: add test3.c
commit2: add test2.c
commit1: add test1.c

这里也可以使用另外一种方法来实现:git cherry-pick 63ee781

Git log 常用选项

选项 说明

-p 按补丁格式显示每个更新之间的差异

–stat 显示每次更新的文件修改统计信息

–shortstat 只显示 –stat 中最后的行数修改添加移除统计

–name-only 仅在提交信息后显示已修改的文件清单

–name-status 显示新增、修改、删除的文件清单

–abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符

–relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)

–graph 显示 ASCII 图形表示的分支合并历史

–pretty 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)

限制输出长度

除了用 -n 来限制输出 log 的条数,还可以用 --since 和 --until 按照时间作限制。

用 --author 选项显示指定作者的提交,用 --grep 选项搜索提交说明中的关键字。

要得到同时满足这两个选项搜索条件的提交,就必须用 --all-match 选项。

-S 列出那些添加或移除了某些字符串的提交。

可以在 git log 选项的最后指定它们的路径。因为是放在最后位置上的选项,所以用两个短划线 – 隔开之前的选项和后面限定的路径名。


列出所有最近两周内的提交

$ git log --since=2.weeks
  • 想找出添加或移除了某一个特定函数的引用的提交
$ git log -Sfunction_name
  • 2018 年 4 月期间,Junio Hamano 提交的但未合并的测试文件
$ git log --pretty="%h - %s" --author=gitster --since="2018-04-01" --before="2018-05-01" --no-merges -- t/
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
7月前
|
人工智能 数据可视化 开发工具
Git log 进阶用法(含格式化、以及数据过滤)
Git log 进阶用法(含格式化、以及数据过滤)
|
7月前
|
开发工具 git
git日志输出相关命令
git日志输出相关命令
|
7月前
|
存储 算法 开发工具
git是什么?git的五个命令,git和svn的区别
git是什么?git的五个命令,git和svn的区别
95 0
|
2月前
|
开发工具 git
git显示开发日志+WinSW——将.exe文件注册为服务的一个工具+图床PicGo+kubeconfig 多个集群配置 如何切换
git显示开发日志+WinSW——将.exe文件注册为服务的一个工具+图床PicGo+kubeconfig 多个集群配置 如何切换
42 1
|
2月前
|
存储 开发工具 git
Git和SVN有什么区别?
综上所述,选择Git还是SVN取决于项目的具体需求、团队规模以及工作习惯。Git因其高级特性和灵活性,成为了现代软件开发中更受欢迎的选择,而SVN在某些特定场景下仍保有一席之地。开发者应当根据实际情况,权衡两者之间的优劣,作出最适合项目的选择。
88 4
|
4月前
|
开发工具 git 开发者
Git Fetch 和 Git Pull:理解两者的区别
【8月更文挑战第27天】
425 1
|
5月前
|
架构师 存储
软件交付问题之在设计领域模型和状态机时,模型和状态机,如何解决
软件交付问题之在设计领域模型和状态机时,模型和状态机,如何解决
|
6月前
|
安全 开发工具 git
蓝易云 - git rebase和merge区别
在选择使用Merge还是Rebase时,需要根据具体的工作流程和团队的规定来决定。一般来说,如果你想保持完整的历史记录并且避免可能的冲突,你应该使用Merge。如果你想要一个干净的、线性的历史记录,你可以使用Rebase。
55 4
|
5月前
|
开发工具 git 开发者
git IDEA的分支合并时的冲突问题总结,merge和rebase的区别
冲突的处理需要开发者之间的充分沟通以及对项目历史的细致理解。选择Merge或Rebase取决于具体的工作流程和团队偏好,但最重要的是保持代码库的整洁与一致性。使用IDEA等工具可以提高处理合并冲突的效率,但手动解析冲突和理解操作背后的逻辑仍然是不可或缺的。最终目标是通过有效的版本控制实践,促进项目的顺利进行和团队协作的高效。
360 0
|
7月前
|
存储 前端开发 开发工具
git clone -mirror 和 git clone 的区别
git clone -mirror 和 git clone 的区别