这10个Git技巧不仅可以节省您的时间,还可以改善您的工作流程。根据手册,Git被定义为傻瓜式的内容跟踪器。它功能丰富,但有些功能令人望而生畏。所以我们只是重用了那几个记住的命令而没有使用它们。https://manpages.debian.org/stretch/git-man/git.1.en.html提示1:最佳配置Git在全局、用户和本地级别具有高度可配置性。https://git-scm.com/docs/git-config查找顺序每个设置都可以被覆盖:$CWD/.git/config▼▼▼$HOME/.gitconfig`▼▼▼$HOME/.config/git/config▼▼▼/etc/gitconfig修改设置用你最喜欢的编辑器或CLI编辑任何配置文件:#Globalsettingsgitconfig--global#Localsettingsgitconfig如果值如果包含空格字符,需要用引号括起来。showcurrentsettings#showcurrentsettingsandtheirorigingitconfig--list--show-origin一些有用的配置#setidentitygitconfig--globaluser.name""gitconfig--globaluser.email#preferrededitinggitconfig--globalcore.editorvim#Certificatecache#WINDOWSgitconfig--globalcredential.helpermanager#LINUX(超时——以秒为单位)gitconfig--globalcredential.helper"cache--timeout=3600"#MACOSgitconfig--globalcredential.helperosxkeychainhttps://git-scm.com/docs/gitcredentials技巧二:别名(alias)创建一个别名来保存常用的git命令:#createanaliasgitconfig--globalalias.""#使用别名git一些有用的别名#撤销上次提交gitconfig--globalalias.undo"reset--softHEAD^"#更新修改暂存区为上次提交(不改变提交信息)gitconfig--globalalias.amend"commit--amend--no-edit"#压缩状态输出gitconfig--globalalias.st"status-sb"#使用GRAPH为日志着色gitconfig--globalalias.lg"log--graph--pretty=format:'%Cred%h%Creset-%C(yellow)%d%Creset%s%Cgreen(%cr)%C(boldblue)<%an>%Creset'"#删除所有合并分支gitconfig--globalalias.rmb"!gitbranch--merged|grep-v'*'|xargs-n1gitbranch-d"#贡献排名gitconfig--globalalias.rank"shortlog-n-s--no-merges"技巧三:查找Commits和更改通过Commits信息查找#通过commit信息查找(所有分支)gitlog--all--grep=''#通过commit信息查找(包括reflog)gitlog-g--grep=''findbychange#findbyupdatedcontentgitlog-S''findbydate#findgitlogbydaterange--after='DEC152019'--until='JAN102020'技巧4:添加hunkgitadd不仅可以添加文件的所有改动,--path/-p参数还可以交互存储块#patch命令y=临时块n=不临时存储这个块q=exita=临时存储这个块andallremainingblocksofthecurrentfiled=donottemporarystorethisblockandallremainingblocksofthecurrentfile/=搜索块(正则表达式)s=分成更小的块se=手动编辑块?=打印帮助说明g=选择要转到的块j=将块设置为未决定,查看下一个未决定的块J=将块设置为未决定,查看下一个块k=设置块设置块挂起,查看上一个挂起的块J=setblockpending,查看下一个blockhttps://git-scm.com/docs/git-add#Documentation/git-add.txt--iTip5:storage(stash)更改不提交stash会暂时放目前的变化搁置。在它的帮助下,可以返回当前状态的索引,并且稍后可以应用隐藏的更改。默认情况下,仅隐藏当前跟踪文件中的更改,忽略新文件。我们可以独立创建和应用多个存储。https://git-scm.com/docs/git-stashcreate#创建新的STASHgitstash#创建一个新的STASH(包括未跟踪的更改)gitstash-u/--include-untracked#创建一个新的STASH并将其命名为gitstashsave""#interactivestashgitstash-plist#列出所有STASH(为其他命令提供“n”)gitstashlistbrowse#浏览STASH内容gitstashshow#浏览STASH差异gitstashshow-papply#应用最后一个STASH(删除stash)gitstashpop#Apply之前的STASH(保留存储)gitstashapply#ApplyspecificSTASH(n=stashlistnumber)gitstashpop/applystash@{n}#CreateanewbranchfromSTASH(n=stashlistnumber)gitstashbranchstash@{n}#从STASH(n=stashlistnumber)应用单个文件gitcheckoutstash@{n}--Cleanup#DeletespecificSTASH(n=stashlistnumber)gitstashdropstash@{n}#DeleteallSTASHgitstashclearTip6:Dry运行(DryRun)很多git操作都是破坏性的,比如gitclean-f会删除所有未跟踪的文件,并且无法恢复红色的。为了避免这种灾难性的结果,许多命令都支持试运行,即在实际生成结果之前检查结果。不幸的是,使用的选项并不完全相同:gitclean-n/--dry-rungitadd-n/--dry-rungitrm-n/--dry-run#GITMERGE模拟DRY-RUNgitmerge--no-commit--no-ffgitdiff--cachedgitmerge--abort注意gitcommit-n根本不是空运行!它实际上是--no-verify,忽略所有预提交/提交消息githooks。提示7:安全强制推送在处理旧提交、创建新头等时很容易搞乱分支。gitpush--force可以覆盖远程更改,但它不应该!gitpush--force是一个破坏性和危险的操作,因为它无条件地生效并销毁其他提交者已经推送的所有提交。这对其他人的代码存储库来说不一定是致命的,但改变历史并影响其他人并不是一个好主意。更好的选择是使用gitpush--force-with-lease。git不会无条件地覆盖上游远程,而是检查本地不可用的远程更改。如果是这样,它会失败并显示“陈旧信息”消息,并告诉我们需要先运行gitfetch。https://git-scm.com/docs/git-push#Documentation/git-push.txt---force-with-leaseltrefnamegt技巧8:修改commit信息Commit是不可变的,不能改变。但是,可以使用新的提交消息修改现有提交,这将覆盖原始提交,因此不要在推送提交中使用它。gitcommit--amend-m""https://git-scm.com/docs/git-commit#Documentation/git-commit.txt---amend技巧九:修改历史代码仓库不限于修改上次提交信息,使用gitrebase修改多次提交:#提交范围gitrebase-i/--interactiveHEAD~#hash之后的所有提交gitrebase-i/--interactive是configured在编辑器中以相反的顺序列出所有提交,像这样:#pick5df8fbcrevampedlogicpickca5154eREADMEtyposfixedpicka104affaddedawesomenewfeature通过更改编辑器中的实际内容,可以为git提供解决方案来说明如何变基:#p,pick=使用没有更改的提交#r,reword=修改提交#e,edit=编辑提交#s,squash=Confluence提交#f,fixup=类似于“squash”,但丢弃提交#x,exec=执行命令(其余ofthelines)#d,drop=Afterremovedacommittosavetheeditor,gitwillrunthisschemeto改写历史。e、edit会暂停rebase,可以编辑代码仓库的当前状态。完成编辑后,运行gitrebase--continue。如果在这个过程中出现问题(比如合并冲突),我们需要重新开始,我们可以使用gitrebase--abort。https://git-scm.com/docs/git-rebase技巧10:归档跟踪文件您可以使用不同的格式(zip或tar)压缩跟踪文件以供特定参考:gitarchive--format--output[可以是分支、提交哈希或标签。https://git-scm.com/docs/git-archive额外提醒:单个破折号有一个快捷方式来表示刚刚使用的分支:单个破折号-gitcheckoutmy-branch#currentbranch:my-branchgitcheckoutdevelop#Currentbranch:developgitmerge-#Mergemy-branchintodevelop单个破折号相当于@{-1}。https://git-scm.com/docs/git-checkout#Documentation/git-checkout.txt-ltbranchgtSummary关于Git还有很多要谈的,所以这里只是触及表面。在另一篇文章中,我想展示如何使用gitbisect有效地查找损坏的提交,或者如何使用gitreflog来利用任何git操作的完整历史记录。]