Git 查找提交

来源:互联网 发布:php中的魔术常量 编辑:程序博客网 时间:2024/05/16 00:40

一、git bisect
git bisect 命令是一个功能强大的工具。运行 git bisect 命令通常为了找出某个导致版本库产生倒退或 bug 的特殊提交。

git bisect 命令系统地在“好”提交和“坏”提交之间选择一个新提交并确定它“是好是坏”,并据此缩小范围。直到最后,当范围内只剩下一个提交时,就可以确定它就是引起错误的那个提交了。

在使用 git bisect 命令时,你只需要在初始时候提供一个初始的“好”提交和“坏”提交即可,然后就是重复回答“这个版本是否可以正常工作”这个问题。
在现实中,那个“坏”提交往往就是你当前的 HEAD,因为那是你在工作时突然注意到出现问题的地方或是你被分配了一个 bug 修复工作。一个初始的“好”提交可以自己选择或猜测在版本库中你知道的某个“好”提交作为开始。可以是 v.2.6.35 这样的标签,或者是一百个修订之前的某个提交(在你的主分支上就是 master~100)。

至关重要的是你要从一个干净的工作目录中启动 git bisect。

在整个二分搜索过程中,Git 维护一个日志来记录你的回答及其提交 ID。

$ git bisect log

可以使用 git bisect visualize 命令来可视化地检查范围内的内容。如果设置 DISPLAY 环境变量, Git 将会使用图形工具 gitk。如果没有,那么 Git 将会使用 git log。在这种情况下,–pretty=oneline 也许会非常有作用。

最后,当你完成二分查找、完成二分记录并保存了状态时,非常重要的一点是你要告诉 Git 你已经完成了。整个二分查找是在一个分离的 HEAD 上执行。

$ git branch* (no branch)  master$ git bisect resetSwitched to branch "master"$ git branch * master

执行 git bisect reset 命令来回到原来的分支上。

二、git blame
有助于识别特定提交的另一种工具是 git blame。此命令可以告诉你一个文件中的每一行最后是谁修改的和哪次提交做出了变更。

$ git blame hello.txte818fb29 (Jon Loeliger 2017-08-06 09:24:34 +0800 1) hello worldde370411 (Jon Loeliger 2017-08-06 09:26:52 +0800 2) hi

三、使用Pickaxe
git blame 命令告诉你文件的当前状态, git log -S*string* 则根据给定的 string 沿着文件的差异历史搜索。通过搜索修订版本间的实际差异,这条命令可以找到那些执行改变(增加或删除)的提交。

$ git log -Shi --pretty=oneline --abbrev-commit hello.txtde37041 add hi to hello.txt

排列的每个提交都添加或删除了那些包含 hi 的行。但是要注意,如果某个提交添加和删除了相同数量的含关键词的行,它将不会显示出来。该提交必须有添加和删除数量上的变化才能计数。

带有 -S 选项的 git log 命令成为 pickaxe,这是一种暴力考古。

原创粉丝点击