关于javascript:20个你可能不知道的Git命令

32次阅读

共计 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 goodgit 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 grepregex兼容,你能够对你搜寻的字符串进行更高级的解决。
你也能够用它来指定文件的扩展名,比方 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 stripspacegit 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 不会被推送到近程仓库,所以要在你的团队中分享和治理它们,你须要应用一个钩子管理器,比方 lefthookhusky。也有一些第三方工具,使治理 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 已收录,有一线大厂面试残缺考点、材料以及我的系列文章。

正文完
 0