当前位置: 首页 > Web前端 > HTML

20条你(可能)不知道的Git命令

时间:2023-03-28 16:54:42 HTML

微信搜索【伟大的走向世界】,第一时间与大家分享前端行业动态、学习路径等。本文已收录到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。您可能还想附加--pretty标志以获得更清晰的输出,但还有许多其他选项可以自定义输出(使用--format),因此此命令对于显示您需要的内容很有用。一个有用的例子是在不切换分支的情况下预览另一个分支中的文件。只需运行gitshowbranch:file。GitDescribe使用gitdescribe查找提交中可访问的最新标记,并为其指定一个人类可读的名称。运行gitdescribe,你会看到一个人类可读的字符串,由最后一个标签的名称和当前提交的内容组合生成一个字符串。你也可以给它传递一个特定的标签。请注意,您必须已经创建了标签,除非您附加了--all标志。默认情况下,Gitdescribe仅使用带注释的标签,因此您必须指定--tags标志以使其也使用轻量级标签。Git标签使用git标签来标记存储库历史记录中的特定点。能够在存储库历史记录中标记特定的重要点通常很有用,最常用于表示版本。创建标签就像gittag一样简单,或者您可以使用gittag-av4.2.0标记历史提交。与提交一样,您可以使用-m在标记旁边附加一条消息。不要忘记使用gitpushorigin将你的标签推送到远程。要列出所有标签,只需运行gittag,可选地使用-l进行通配符搜索。然后,您可以使用gitcheckout签出特定标签。GitReflog使用gitreflog列出存储库中的所有更新Git使用称为参考日志或“reflogs”的机制来跟踪分支顶端的更新。跟踪各种事件,包括:克隆、拉取、推送、提交、签出和合并。能够找到对事件的引用通常很有用,因为许多命令都接受引用作为参数。只需运行gitreflog即可在HEAD上查看最近的事件。reflog非常有用的一件事是恢复丢失的提交。Git永远不会丢失任何东西,即使在重写历史时(例如重写或更正提交)。Reflog允许您返回提交,即使它们没有被任何分支或标记引用。默认情况下,reflog使用HEAD(您当前的分支),但您可以在任何ref上运行reflog。例如gitreflogshow或gitreflogstash以查看隐藏的更改。或者使用gitreflogshow--all来显示所有的引用日志。GitLog使用gitlog查看提交列表您可能已经熟悉运行gitlog来查看当前分支上最近提交的列表。但是你还可以用gitlog做其他事情。使用gitlog--graph--decorate--oneline将显示一个漂亮、整洁的提交和引用指针图。您还经常需要能够根据各种参数过滤日志,其中最有用的是.gitlog--search=""-搜索特定代码修改的日志gitlog--author=""-只显示特定作者的日志gitlog--grep=""-使用搜索词或重组词过滤器记录gitlog...-显示两个引用之间的所有提交gitlog----显示仅对特定文件进行的所有提交,或者,只运行gitshortlog获取夏季提交列表。GitCherryPick使用gitcherry-pick通过引用选择指定的提交并将其附加到工作HEAD。有时你需要从其他地方拉一个特定的提交到你当前的分支。这对于应用修补程序、撤消更改、恢复丢失的提交和某些团队协作很有用。重要的是要注意,传统的合并通常是更好的做法,因为挑选提交会导致日志中出现重复提交。它易于使用,只需运行gitcherry-pick。这会将指定的提交拉入当前分支。GitSwitch使用gitswitch在分支之间移动是我们经常做的事情。switch命令就像是gitcheckout的简化版本。它可以用于创建和浏览不同的分支,但与结帐不同的是,在分支之间移动时,修改的文件不会被复制。与checkout-b类似,switch命令可以附加-c标志以创建一个新分支并直接跳转到其中,例如gitswitch-c<新分支>。而运行gitswitch-将放弃您所做的任何实验性更改,并返回到您之前的分支。GitStandup使用gitstandup来回忆你在前一个工作日做了什么,基于gitcommits我把它放在最后是因为它不包含在大多数git客户端中,但是你可以使用你的系统包管理器,通过一行轻松安装它curl脚本,或从源代码构建。如果你的老板要求你做一个每日总结,更新昨天的工作,但你不记得你做了什么——这个是给你的,它会在给定时间范围内完成的所有事情中显示一个格式良好的列表.使用简单,运行gitstandup即可,或者使用options指定显示哪些数据(作者、时间范围、分支等。原文:https://leerob.substack.com/p...可能存在于编辑Bug无法实时获知,后期为了解决这些Bug,花费了很多时间在日志调试上,顺便推荐一个好用的BUG监控工具Fundebug,交流有梦,有干货,微信搜索【伟大的走向世界】关注这位凌晨还在洗碗的洗碗智者,本文GitHubhttps://github.com/qq449245884/xiaozhi已收录,还有完整的测试站点、资料和我的一线厂商访谈系列文章。