微信搜索【伟大的走向世界】,第一时间与大家分享前端行业动态、学习路径等。本文已收录到GitHubhttps://github.com/qq449245884/xiaozhi,里面有完整的测试站点、资料和我的一线厂商访谈系列文章。如果您曾经浏览过git手册(或运行mangit),那么您会注意到git的功能比我们大多数人每天使用的要多得多。其中许多命令都非常强大,可以让您的生活更轻松(其他命令更小众,但无论如何都值得了解)。这篇文章概述了我最喜欢的20个未使用的git功能,您可以使用它们来增强您的开发过程,给您的同事留下深刻印象,帮助您回答git面试问题,最重要的是-让您开心!GitWeb运行gitinstaweb以立即浏览gitweb中的工作存储库。Git有一个内置的基于Web的visualizer可视化工具,用于浏览本地存储库,允许您通过浏览器GUI查看和管理您的存储库。它有许多有用的功能,包括。浏览和浏览修订、检查差异、文件内容和元数据可视化查看提交日志、分支、目录、文件历史和附件数据为提交和存储库活动日志生成RSS或Atom提要搜索提交、文件、更改和差异打开它,只需在您的存储库中运行gitinstaweb即可。您的浏览器应该会弹出并加载http://localhost:1234。如果您没有安装Lighttpd,您可以使用-d标志指定备用Web服务器。其他选项可以通过标志配置(例如-p用于端口,-b用于浏览器打开等),或在[instaweb]块下的git配置中。还有gitgui命令,它打开一个基于GUI的git应用程序GitNotes使用gitnotes向提交添加额外信息。这些注释存储在.git/refs/notes中,由于它与提交对象数据是分开的,因此您可以随时修改与提交关联的注释,而无需更改SHA-1哈希。您可以使用gitlog、大多数gitGUI应用程序或gitnotesshow命令查看注释。一些git大师还在提交视图中显示注释(尽管GH不再显示它们)。GitBisect使用gitbisect,您可以使用二进制搜索来查找引入错误的提交。这是最强大但最容易使用的git命令之一-bisect在调试时绝对是救星。当你启动bisect时,它会为你检查提交,然后你告诉它提交是好(没有错误)还是坏(引入错误),这允许你缩小最早有错误的提交。为了让事情正常运行,运行gitbisectstart,然后通过gitbisectgood传递一个已知的良好提交,并通过gitbisectbad(默认为current)传递一个已知的错误提交。然后它将检查好提交和坏提交之间的提交,并且您可以使用gitbisectgood或gitbisectbad指定错误是否存在。然后它会重复这个过程,在好的和坏的中间检查一个提交,直到你找到引入错误的确切提交。随时使用gitbisectreset取消。bisect命令还有很多其他功能,包括重放、查看提交和跳过,因此下次调试时值得查看文档。GitGrep使用gitgrep在您的存储库中搜索代码、文件、提交或任何其他内容是否发现自己需要在git项目的任何位置搜索字符串?使用gitgrep,您可以轻松地在整个项目中跨分支搜索任何字符串或RegEx(就像更强大的Ctrl+F!)。gitgrep
它包括许多选项来缩小搜索范围,或指定结果格式。例如,使用-l仅返回文件名,-c指定每个文件的匹配数,-e排除匹配结果,--and指定多个条件,以及-n按行号搜索。由于gitgrep与正则表达式兼容,因此您可以对搜索的字符串进行更高级的处理。你也可以用它来指定文件的扩展名,比如gitgrep'console.log'*.js会显示所有JavaScript文件中的console.logs。第二个参数是ref,它可以是分支名称、提交、提交范围或任何其他内容。例如,gitgrep"foo"HEAD~1将搜索上一个提交。GitArchive使用gitarchive将整个存储库合并到一个文件中。共享或备份存储库时,通常首选将其存储为单个文件。使用gitarchive将包含repo的所有历史记录,因此可以轻松将其提取回其原始形式。该命令还包括许多附加选项,因此您可以准确自定义哪些文件包含在存档中,哪些不包含。gitarchive--format=tar--output=./my-archiveHEADGit子模块使用git子模块将任何其他存储库拉入您的存储库在git中,子模块允许您将一个存储库加载到另一个存储库,通常基于核心依赖项或单独的组件到单独的存储库中。有关更多信息,请参阅此帖子。运行下面的命令会将一个模块拉到指定位置,并创建一个.gitmodules文件,以便在克隆repo时始终下载它。在克隆repo时使用--recursive标志来包含子模块。GitBugReport使用gitbugreport来写一个bugticket,包括git和系统信息。此命令将捕获系统信息,然后打开标准错误模板(重现步骤、实际+预期输出等)。完成的文件应该是一个非常完整的错误报告,包括所有必要的信息。如果您是开源包的维护者并要求用户(开发人员)提交错误报告,这将非常方便,因为它确保包含所有必要的数据。如果您要提交核心git系统的错误报告,您还可以运行git诊断命令,然后在此处提交您的问题。GitFsck使用gitfsck检查所有对象,或恢复无法访问的对象。虽然不是经常需要,但有时您可能需要验证git存储的对象。这就是fsck(或文件系统检查)所做的,它测试对象数据库,验证所有对象及其连接的SHA-1ID。它还可以与--unreachable标志一起使用,以查找不再可以从任何命名引用访问的对象(因为与其他命令不同,它包含.git/objects中的所有内容)。GitStripspace使用gitstripspace来格式化给定文件中的空格。最好的做法是避免行尾有空格,避免多个连续的空行,避免输入的开头和结尾有空行,每个文件以新行结束。有很多特定于语言的工具可以自动执行此操作(例如prettier),但Git也内置了此功能。它主要用于元数据(提交信息、标签、分支描述等),但如果您将文件通过管道传输给它,然后将响应通过管道传输回文件,它也很有用。例如,cat./path-to-file.txt|gitstripspace或gitstripspaceclean-file.txt你也可以用它来去除注释(使用--strip-comments),甚至注释行(使用--comment-lines)。GitDiff使用gitdiff你可以比较两组代码之间的差异你可能知道,你可以运行gitdiff来显示自上次提交以来的所有更改,或者使用gitdiff来比较2次提交,或者1致力于HEAD。但是您可以使用diff命令做更多的事情。您还可以使用它来比较任意两个文件,例如difffile-1.txtfile-2.txt(无需再访问diffchecker.com!)。或者使用gitdiffbranch1...branch2来比较两个分支,或者相互引用。请注意,双点(...)与空格相同,表示差异输入应该是分支的尖端,但您也可以使用三点(...)将第一个参数转换为普通参数在两个diff输入之间共享Ancestorcommitref——如果您只想比较不同分支的文件,则非常有用,只需将文件名作为第三个参数传递即可。您可能希望查看特定日期范围内的所有更改,为此使用gitdiffHEAD@{7.day.agree}HEAD@{0}(上周),这也可以与文件名、分支名、特定提交或任何其他参数对。还有gitrange-diff命令,它提供了一个用于比较提交范围的简单界面。gitdiff工具具有更多功能(以及使用您自己的差异检查器的选项),因此我建议您查看文档。Git钩子使用钩子在给定的获取操作发生时执行命令或运行脚本。钩子可以让你自动化几乎任何事情。例如:确保符合标准(提交消息、分支名称、补丁大小)、代码质量(测试、lint)、将额外信息附加到提交(用户、设备、票证ID)、调用webhook来记录事件或运行管道等.大多数git事件都有pre-hooks和post-hooks,比如commit,rebase,merge,push,update,applypatch等,hooks存放在.git/hooks中(除非你用gitconfigcore在别处配置它们。hooksPath),并且可以使用githook命令进行测试。由于它们只是shell文件,因此可用于运行任何命令。钩子不会被推送到远程存储库,因此要在您的团队中共享和管理它们,您需要使用像lefthook或husky这样的钩子管理器。还有一些第三方工具可以让管理hooks更容易,我推荐overcommit。请记住,挂钩总是可以跳过(使用--no-verify标志),所以永远不要纯粹依赖挂钩,尤其是与安全相关的东西。GitBlame使用gitblame显示特定修订和行的作者信息。快速找出谁写了特定代码行的经典方法(即您的同事对错误负责!)。但它也可用于确定在什么时间点发生了什么变化,并检查该提交和相关的元数据。例如,要在index.rs的第400到420行查看作者和提交信息,您需要运行gitblame-L400,420index.rsGitLFS使用gitlfs来存储大文件而不会减慢您的repo通常您的项目将包含大文件(例如数据库、二进制资产、档案或媒体文件),这将减慢git工作流程并超出使用限制。这就是大文件存储的用武之地——它使您能够将这些大资产存储在其他地方,同时让它们在git中可跟踪并保持相同的访问控制/权限。LFS的工作原理是将这些大文件替换为文本指针,在git中进行跟踪。要使用它,只需运行gitlfstrack它就会更新你的.gitattributes文件。您可以按文件扩展名(如*.psd)、目录或单独指定文件。运行gitlfsls-files以查看跟踪的LFS文件列表。GitGC使用gitgc优化您的存储库随着时间的推移,git存储库会积累各种类型的垃圾,这些垃圾会占用磁盘空间并降低运行速度。这就是内置垃圾收集器所做的。运行gitgc将删除无主和不可访问的提交(使用gitprune)、压缩修订和存储的git对象,以及一些其他一般内务处理,如打包引用、修剪引用日志、尊重元数据或陈旧的工作树并更新索引。添加--aggressive标志将积极优化存储库,丢弃任何现有的增量并重新计算,这需要更长的时间才能运行,但如果您有一个大型存储库,则可能是必要的。GitShow使用gitshow轻松检查任何git对象。以人类可读的形式输出对象(blob、树、标签或提交)。要使用,只需运行gitshow