git reflog 和 git log 的区别

简介: 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/
相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
人工智能 数据可视化 开发工具
Git log 进阶用法(含格式化、以及数据过滤)
Git log 进阶用法(含格式化、以及数据过滤)
|
开发工具 git
git日志输出相关命令
git日志输出相关命令
|
开发工具 git
git fetch和 pull的区别
`git fetch`和 `git pull`在Git中扮演着不同的角色,了解它们的区别和使用场景对于高效管理代码库至关重要。通过合理使用这两个命令,可以更好地控制代码合并过程,减少冲突,提高团队协作效率。
1123 97
|
存储 安全 开发工具
Git 对比 SVN 的区别和优势
Git和SVN各有优劣,选择哪种工具取决于项目的具体需求和团队的协作模式。Git适合大型、复杂、需要频繁分支和合并操作的项目,而SVN则更适合小型项目和集中式团队协作。通过本文的对比分析,开发者可以更好地理解两者
1648 13
|
开发工具 git
git fetch和 pull的区别
通过这些内容和示例,您可以系统地理解 `git fetch`和 `git pull`的区别,并在实际工作中灵活应用这两个命令,提高版本控制的效率。希望这些内容对您的学习和工作有所帮助。
950 24
|
开发工具 git
git的rebase和merge的区别
通过这些内容和示例,您可以深入理解Git的 `rebase`和 `merge`操作及其区别,选择合适的方法进行分支管理,提高版本控制的效率和规范性。希望这些内容对您的学习和工作有所帮助。
3047 5
|
SQL 存储 关系型数据库
简单聊聊MySQL的三大日志(Redo Log、Binlog和Undo Log)各有什么区别
在MySQL数据库管理中,理解Redo Log(重做日志)、Binlog(二进制日志)和Undo Log(回滚日志)至关重要。Redo Log确保数据持久性和崩溃恢复;Binlog用于主从复制和数据恢复,记录逻辑操作;Undo Log支持事务的原子性和隔离性,实现回滚与MVCC。三者协同工作,保障事务ACID特性。文章还详细解析了日志写入流程及可能的异常情况,帮助深入理解数据库日志机制。
1751 0
|
存储 开发工具 git
Git和SVN有什么区别?
综上所述,选择Git还是SVN取决于项目的具体需求、团队规模以及工作习惯。Git因其高级特性和灵活性,成为了现代软件开发中更受欢迎的选择,而SVN在某些特定场景下仍保有一席之地。开发者应当根据实际情况,权衡两者之间的优劣,作出最适合项目的选择。
714 4
|
开发工具 git
git显示开发日志+WinSW——将.exe文件注册为服务的一个工具+图床PicGo+kubeconfig 多个集群配置 如何切换
git显示开发日志+WinSW——将.exe文件注册为服务的一个工具+图床PicGo+kubeconfig 多个集群配置 如何切换
359 1
|
开发工具 git 开发者
Git Fetch 和 Git Pull:理解两者的区别
【8月更文挑战第27天】
1542 1