共计 6981 个字符,预计需要花费 18 分钟才能阅读完成。
微信搜寻【大迁世界】, 我会第一工夫和你分享前端行业趋势,学习路径等等。
本文 GitHub https://github.com/qq449245884/xiaozhi 已收录,有一线大厂面试残缺考点、材料以及我的系列文章。
如果你已经浏览过 git 手册(或运行 man git
),那么你会留神到git
的内容比咱们大多数人日常应用的多得多。这些命令中有很多是十分弱小的,能够让你的生存变得更轻松(其余的则有点小众,但还是要晓得的)。
这篇文章概述了我最喜爱的 20 个不罕用的 git 性能,你能够应用它们来晋升你的开发过程,给共事留下深刻印象,帮忙你答复 git 面试问题,最重要的是 – 让你有乐趣!
Git Web
运行 git instaweb 能够立刻在 gitweb 中浏览你的工作存储库。
Git 有一个内置的 web-based visualiser
的可视化工具,用于浏览本地仓库,让你通过浏览器的 GUI 来查看和治理你的仓库。它有很多有用的性能,包含。
- 浏览和浏览修订版,查看差别、文件内容和元数据
- 直观地查看提交日志、分支、目录、文件历史和附件数据
- 生成提交和版本库流动日志的 RSS 或 Atom feeds
- 搜寻提交、文件、更改和差别
要关上它,只需在你的版本库中运行 git instaweb
。你的浏览器应该弹出,并加载http://localhost:1234
。如果你没有装置 Lighttpd,你能够用-d
标记指定一个代替的网络服务器。其余选项能够通过标记(比方 -p
示意端口,-b
示意浏览器关上,等等),或者在你的 git config
中的 [instaweb]
块下配置。
还有 git gui
命令,它能够关上一个基于 GUI 的 git 利用
Git Notes
应用
git notes
为提交增加额定信息
有时您须要为一个 git 提交附加额定的数据(不仅仅是更改、音讯、日期工夫和作者信息)。
这些正文存储在 .git/refs/notes
中,因为它与提交对象数据离开,您能够随时批改与提交相干的正文,而不会扭转 SHA-1
哈希值。
你能够用 git log
、大多数 git GUI 应用程序或git notes show
命令来查看正文。一些 git 主机也在提交视图中显示正文(只管 GH 不再显示正文)。
Git Bisect
应用git bisect
,您能够通过二进制搜寻找到引入谬误的提交。
这是最弱小但又最容易应用的 git 命令之一 – 当波及到调试时,bisect
相对是个救星。启动 bisect 后,它为你查看提交,你通知它该提交是好的(没有 bug),还是坏的(引入了 bug),这能够让你放大呈现 bug 的最早的提交。
要开始工作,先运行 git bisect start
,而后用git bisect good <commit-hash>
传递一个已知的好的提交,用 git bisect bad <optional-hash>
传递一个已知的坏的提交(默认为以后)。而后它将查看好的和坏的提交之间的提交,而后你用 git bisect good
或git bisect bad
来指定谬误是否存在。而后它将反复这个过程,在坏和好的两头查看出一个提交,始终到你找到引入该谬误的确切提交。用 git bisect reset
随时勾销。
bisect
命令还有很多内容,包含重放、查看提交、跳过,所以下次调试的时候值得看看文档。
Git Grep
》应用 git grep
来搜寻代码、文件、提交或其余任何货色,逾越你的 repo
有没有发现自己须要在 git 我的项目的任何中央搜寻一个字符串?应用git grep
,您能够轻松地在整个我的项目中搜寻任何字符串或 RegEx,也能够跨分支搜寻(就像一个更弱小的Ctrl + F!
)。
git grep <regexp><ref></p><p>
它包含很多选项来放大搜寻范畴,或指定后果格局。例如,应用 -l
只返回文件名,-c
指定每个文件的匹配数量,-e
排除符合条件的后果,--and
指定多个条件,-n
用行号搜寻。
因为 git grep
与regex
兼容,你能够对你搜寻的字符串进行更高级的解决。
你也能够用它来指定文件的扩展名,比方 git grep 'console.log' *.js
会显示所有 JavaScript 文件中的console.logs
。
第二个参数是 ref
,能够是分支名、提交、提交范畴,或者其余任何货色。例如,git grep "foo" HEAD~1
会搜寻前一个提交。
Git Archive
应用
git archive
把整个版本库合并成一个文件
当分享或备份一个版本库时,通常偏向于将其存储为一个繁多的文件。应用 git archive
将包含所有的 repo
历史,所以它能够很容易地被提取回它的原始模式。该命令还包含很多额定的选项,所以你能够精确地定制哪些文件包含在归档中,哪些不包含。
git archive –format=tar –output=./my-archive HEAD
Git Submodules
应用
git submodule
将任何其余仓库拉入你的仓库
在 git
中,submodules
让你把一个版本库装入另一个版本库,通常用于外围依赖关系或把组件宰割成独立的版本库。更多信息,请看这个帖子。
运行上面的命令将把一个模块拉到指定的地位,同时创立一个 .gitmodules
文件,这样当 repo
被克隆时就会始终下载它。应用 --recursive
标记,在克隆 repo
时包含子模块。
Git Bug Report
应用 git bugreport 来编写一份 bug ticket,包含 git 和零碎信息
这个命令将捕捉零碎信息,而后关上一个规范的 bug 模板(重现步骤,理论 + 预期输入,等等)。实现的文件应该是一个十分残缺的 bug 报告,包含所有必要的信息。
如果你是一个开源包的维护者,并要求用户(开发者)提出一个 bug 报告,这就十分不便了,因为它能够确保包含所有必要的数据。
如果你要向外围 git 零碎提出一个 bug 报告,你也能够运行 git diagnose
命令,而后在这里提出你的问题。
Git Fsck
应用 git fsck
查看所有对象,或复原无奈达到的对象
尽管不是常常须要,但有时你可能须要验证 git 存储的对象。这就是 fsck
(或称文件系统查看)的作用,它测试对象数据库,验证所有对象的SHA-1 ID
以及它们的连贯。
它也能够和 --unreachable
标记一起应用,以找到不再能从任何命名的援用中达到的对象(因为与其余命令不同,它包含 .git/objects
中的所有内容)。
Git Stripspace
应用 git stripspace
来格式化给定文件中的空白处
最好的做法是防止在行尾留白,避免出现多个间断的空行,防止在输出的结尾和结尾呈现空行,并以新行完结每个文件。有很多特定语言的工具能够主动做到这一点(比方 prettier),但 Git 也有这个内置性能。
它次要用于元数据(提交信息、标签、分支形容等),但如果你用管道将文件输送给它,而后再将响应输送回文件,它也能发挥作用。例如,cat ./path-to-file.txt | git stripspace
或 git stripspace < dirty-file.txt > clean-file.txt
你也能够用它来删除正文(用--strip-comments
),甚至是正文行(用--comment-lines
)。
Git Diff
用 git diff
能够比拟两组代码之间的差别
您可能晓得,您能够运行 git diff
来显示自上次提交以来的所有更改,或者应用 git diff <commit-sha>
来比拟 2 个提交,或 1 个提交到 HEAD。但你能够用 diff
命令做的事件还有很多。
你也能够用它来比拟任意两个文件,比方 diff file-1.txt file-2.txt
(不必再拜访 diffchecker.com
了!)。
或者用 git diff branch1...branch2
来比拟两个分支,或者互相参照。
留神,双点(...
)与空格雷同,示意 diff
输出应该是分支的顶端,但你也能够用三点(...
)将第一个参数转换成两个 diff
输出之间共享的独特先人提交的 ref--
十分有用 如果你只想在不同分支间比拟一个文件,只需将文件名作为第三个参数传入。
你可能想看某个日期范畴内的所有改变,为此应用git diff HEAD@{7.day.agree} HEAD@{0}
(上周),这也能够与文件名、分支名、特定提交或任何其余参数配对。
还有 git range-diff
命令,它提供了一个比拟提交范畴的简略接口。
git diff
工具还有很多性能(以及应用你本人的 diff
查看器的选项),所以我倡议你去看看文档。
Git Hooks
当一个给定的获取动作产生时,应用 hooks 来执行命令或运行脚本。
Hooks 能够让你实现简直任何事件的自动化。例如:确保符合标准(提交音讯、分支名称、补丁大小),代码品质(测试、lint),为提交附加额定信息(用户、设施、ticket ID),调用 webhook 记录事件或运行管道,等等。
大多数 git 事件都有前钩和后钩,比方提交、重定位、合并、推送、更新、applypatch 等。
钩子存储在 .git/hooks
中(除非你用 git config core.hooksPath
在其余中央配置它们),并且能够用 git hook
命令来测试。因为它们只是 shell
文件,它们能够用来运行任何命令。
Hooks 不会被推送到近程仓库,所以要在你的团队中分享和治理它们,你须要应用一个钩子管理器,比方 lefthook
或husky
。也有一些第三方工具,使治理 hooks 更容易,我举荐 overcommit
。
记住,hooks 总是能够被跳过的(用 --no-verify
标记),所以永远不要纯正依赖钩子,特地是与平安无关的货色。
Git Blame
应用
git blame
来显示特定订正和行的作者信息
一个经典的办法,疾速找出谁写了一行特定的代码(也就是你的共事要为这个谬误负责!)。但它也能够用来确定在哪个工夫点扭转了什么,并查看该提交和相干元数据。
例如,要查看 index.rs
第 400 至 420 行的作者和提交信息,你须要运行。
git blame -L 400,420 index.rs
Git LFS
应用
git lfs
存储大文件,不连累你的 repo
通常你的我的项目会蕴含较大的文件(如数据库、二进制资产、档案或媒体文件),这将拖慢 git 的工作流程并超出应用限度。这就是大文件存储的作用 --
它使你可能将这些大的资产存储在其余中央,同时放弃它们在 git 中的可追踪性,并放弃雷同的访问控制 / 权限。LFS 的工作原理是将这些大文件替换成文本指针,在 git 中进行跟踪。
要应用它,只需运行 git lfs track <file glob>
,它将更新你的.gitattributes
文件。你能够通过文件的扩展名(比方 *.psd
)、目录或独自指定文件。运行git lfs ls-files
能够查看被追踪的 LFS 文件的列表。
Git GC
应用 git gc 来优化你的版本库
随着工夫的推移,git 仓库会积攒各种类型的垃圾,这些垃圾会占用磁盘空间,并拖慢口头。这就是内置垃圾收集器的作用。运行 git gc 将删除无主的和不可拜访的提交(用git prune
),压缩文件订正和存储的 git 对象,以及其余一些个别的内务工作,如打包 Refs、修剪 reflog、revere metadata 或古老的工作树和更新索引。
增加 --aggressive
标记将踊跃地优化版本库,抛弃任何现有的 deltas 并从新计算,这须要更长的运行工夫,但如果你有一个大的版本库,可能会须要。
Git Show
应用 git show 能够轻松查看任何 git 对象。
输入对象(blob、树、标签或提交)以易于浏览的模式。要应用,只需运行 git show <object>
。您还可能心愿附加 --pretty
标记,以取得更清晰的输入,但还有许多其余选项能够自定义输入(应用 --format
),因而此命令对于显示您须要的内容十分有用。
一个很有用的例子是,在另一个分支中预览文件,而无需切换分支。只需运行 git show branch:file
。
Git Describe
应用
git describe
找到一个提交中可涉及的最新标签,并给它一个人类可读的名字
运行git describe
,你会看到一个人类可读的字符串,它是由最初一个标签的名字和以后提交的内容组合而成的,生成一个字符串。你也能够向它传递一个特定的标签。
请留神,你必须曾经创立了标签才行,除非你附加了 –all 标记。Git describe 默认状况下只应用带正文的标签,所以你必须指定 –tags 标记,让它也应用轻量级标签。
Git Tag
应用 git tag
标记你的版本库历史中的特定点
可能标记版本库历史上特定的、重要的点通常很有用,最罕用来示意版本。创立一个标签就像 git tag <tagname>
一样简略,或者你能够用 git tag -a v4.2.0 <commit sha>
标记一个历史提交。和提交一样,您能够用 -m
在标签旁边加上一条信息。
别忘了用 git push origin <tagname>
把你的标签推送到近程。
要列出所有标签,只需运行 git tag
,并可抉择应用 - l 进行通配符搜寻。
而后你就能够用 git checkout <tagname>
签出一个特定的标签。
Git Reflog
应用
git reflog
列出你的 repo 上的所有更新
Git 应用一种叫做参考日志,或 “reflogs “ 的机制来跟踪分支顶端的更新。各种事件被追踪,包含:克隆、拉、推、提交、签出和合并。可能找到一个事件的参考往往很有用,因为许多命令都承受参考作为参数。只有运行 git reflog
来查看 HEAD
上最近的事件。
reflog
十分有用的一件事是复原失落的提交。Git 从来不会失落任何货色,即便是在重写历史的时候(比方重写或修改提交)。Reflog 容许你回到提交,即便它们没有被任何分支或标签所援用。
默认状况下 reflog 应用 HEAD
(你以后的分支),但你能够在任何 ref 上运行 reflog。例如 git reflog show <branch name>
,或者用 git reflog stash
来查看暗藏的批改。或者用 git reflog show --all
来显示所有的援用。
Git Log
应用 git log 来查看提交列表
你可能曾经很相熟运行 git log
来查看以后分支上最近的提交列表了。但你还能够用 git log
做一些别的事件。
应用 git log --graph --decorate --oneline
会显示一个丑陋的、参差的提交图以及 ref pointers。
你还常常须要可能依据各种参数来过滤日志,其中最有用的是。
git log --search="<anything>"
– 搜寻特定代码批改的日志git log --author="<pattern>"
– 只显示特定作者的日志git log --grep="<pattern>"
– 应用搜索词或重组词过滤日志git log <since>...<until>
– 显示两个援用之间的所有提交内容git log -- <file>
— 显示所有只对某一特定文件做出的提交
或者,只需运行 git shortlog
就能够失去一个冬季的提交列表。
Git Cherry Pick
应用 git cherry-pick
来通过援用筛选指定的提交,并将其追加到工作的 HEAD 中。
有时你须要从其余中央拉出一个特定的提交,到你以后的分支。这在利用热修复、撤销批改、复原失落的提交以及某些团队合作中十分有用。须要留神的是,传统的合并通常是更好的做法,因为筛选提交会导致日志中呈现反复的提交。
应用办法很简略,只需运行git cherry-pick <commit-hash>
。这将把指定的提交拉到你的以后分支。
Git Switch
应用 git switch
在分支间挪动是咱们常常做的事件,switch
命令就像是 git checkout
的简化版,它能够用来创立和浏览不同的分支,但与 checkout 不同的是,在分支间挪动时不会复制批改过的文件。
与 checkout -b
相似,switch
命令能够附加 -c
标记来创立一个新的分支,并间接跳入其中,例如 git switch -c < 新分支 >
。而运行git switch
– 会抛弃你所做的任何实验性批改,并返回到你之前的分支。
Git Standup
应用 git standup 来回顾你在上一个工作日所做的事件,基于 git 提交的内容
我把这个放在最初,因为它不包含在大多数 git 客户端中,但你能够用你的零碎包管理器,用一个单行的 curl 脚本,或者从源码构建来轻松装置它。
如果你的老板要求你每天做一个总结,对昨天的工作进行更新,但你总是记不住你到底做了什么 – 这个是为你筹备的 它将显示一个格局良好的列表,列出在给定工夫范畴内所做的所有。应用办法很简略,只有运行git standup
,或者应用这些选项来指定应该显示的数据(作者、工夫范畴、分支等。
原文:https://leerob.substack.com/p…
编辑中可能存在的 bug 没法实时晓得,预先为了解决这些 bug, 花了大量的工夫进行 log 调试,这边顺便给大家举荐一个好用的 BUG 监控工具 Fundebug。
交换
有幻想,有干货,微信搜寻 【大迁世界】 关注这个在凌晨还在刷碗的刷碗智。
本文 GitHub https://github.com/qq449245884/xiaozhi 已收录,有一线大厂面试残缺考点、材料以及我的系列文章。