作者:LogMURL><本地目录名>gitclone--recursive<仓库的url><本地目录名>#指定要克隆的分支gitclone-b<分支名>gitclone-b#clonerepository时,使用的远程主机被git自动命名为origin#使用-o修改远程主机名gitclone-o<远程主机名><库的版本URL>2.查看历史#查看历史中的每一个操作gitreflog#查看历史提交gitloggitlog--oneline#查看提交修改gitshowgitshow--statgitshow#查看两者的区别两个分支gitdiffgitdiff--stat#查看一个文件的变化,没有添加gitdiff#查看已经添加的文件有哪些与上次提交相比有变化吗?gitdiff--cached3.远程主机管理#列出所有远程主机名gitremote#参考远程主机的URLgitremote-v#查看主机的详细配置gitremoteshow#添加远程主机gitremoteadd#删除远程主机gitremoterm#远程主机重命名gitremoterename吨;4.分支管理#获取远程主机的新更新到本地,默认获取所有分支的更新#它获取的代码对你本地的开发代码没有影响(只要让`gitbranch-a`显示远程新增的分支,不修改本地代码)gitfetch#获取远程主机的具体分支gitfetch#查看远程分支gitbranch-r#查看所有分支gitbranch-a#在origin/master的基础上,新建一个本地分支gitcheckout-bnewBrachorigin/master#相当于执行gitbranchnewBrachgitcheckoutnewBrach#查看跟踪关系gitbranch-vv#手动建立跟踪关系gitbranch--set-upstream-to=origin/remoteBranchlocalBranch#当远程分支不存在时,创建远程分支并建立跟踪关系gitpush-uoriginlocalBranch#删除本地分支gitbranch-d#重命名本地分支gitbranch-m#如果对应的远程分支也需要重命名,先删除对应的远程分支,再将本地分支推送到远程#如果推送时省略本地分支名称,表示删除指定的远程分支,因为这相当于将一个空的本地分支推送到远程分支gitpushorigin:master#相当于gitpushorigin--deletemaster5。pullbackupdate#取回远程主机某个分支的更新,然后合并到本地指定的分支#本质上相当于先做gitfetch,再做gitmergegitpull:#使用rebase方式,可以使用--rebase选项gitpull--rebase:#如果远程分支是与当前分支合并,冒号后面部分可以省略gitpull#如果本地当前分支在remotehost上已经有跟踪关系分支,分支名可以省略gitpull#如果跟踪分支只有一个,可以省略主机名gitpull#如果远程主机删除了一个分支,默认情况下gitpull在拉取远程分支时不会删除对应的本地分支#添加参数-p会在本地删除远程删除的分支gitpull-p#相当于gitfetch--pruneorigingitfetch-p6。pushupdate#将本地分支的更新推送到远程主机gitpush<远程主机名><本地分支名>:<远程分支名>#如果省略远程分支名,表示将推送本地分支到与其有“跟踪关系”的远程分支。如果远程分支不存在,则会创建它。gitpushoriginmaster#如果本地分支省略name,则表示删除指定的远程分支,因为这相当于将一个空的本地分支推送到远程分支gitpushorigin:master#相当于gitpushorigin--deletemaster#如果当前分支和远程分支有跟踪关系,则本地分支和远程分支都可以省略。gitpushorigin#如果当前分支只有一个跟踪分支,那么主机名可以省略。两者都被推送到远程主机。这时候需要使用--all选项gitpush--allorigin#如果远程主机的版本比本地版本新,Git在push的时候会报错,你应该先pull合并后的代码如果一定要推送,可以使用--force选项gitpush--forceorigin#gitpush不会推送标签(tag),除非你使用--tags选项gitpushorigin--tags7。代码回滚#文件已修改,但未执行gitadd操作gitcheckoutfileName#同时对多个文件执行了gitadd操作,但这次只想提交部分文件#取消临时storagegitresetHEAD#文件已经执行了gitadd操作,但是想撤消它的修改#取消暂存gitresetHEADfileName#撤消修改gitcheckoutfileName#修改的文件已经被git提交,但是想再次修改,不会产生新的Commit#修改上次的commit$gitaddfileName$gitcommit--amend-m"Description"#我在本地进行了多次gitcommit操作,现在想撤消一次他们中的。Commitgitreset[--hard|soft|mixed|merge|keep][commit|HEAD]#hard:重置索引和工作目录,自以来工作目录中的任何更改都将被丢弃,并将HEAD指向#soft:索引和工作目录没有变化,只是将HEAD指向。自以来的所有更改将显示在gitstatus中的“Changestobecommitted”中#mixed:只重置索引,但不重置工作目录。该模式为默认模式,即不显示gitreset模式时,会使用混合模式。这种模式的效果是工作目录下文件的修改会被保留,不会被丢弃,但不会被标记为“Changestobecommitted”,而是会报告哪些还没有更新#return本地状态返回和远程一样gitreset--hardorigin/devlop#revert是放弃指定提交的修改,但是会生成新的提交,需要填写提交注释,以及以前的历史记录都在那里;#reset是指将HEAD指针指向Up到指定的commit,history中不会出现abandonedcommit的记录。8.用户配置#配置分为三层#--local/--global/--system#查看当前仓库的配置信息,打印信息上半部分为全局配置,下半部分为从当前仓库复制的配置gitconfig--listgitconfig--global-l#修改配置,不带引号即可输入gitconfiguser.name"Writetheusernamehere"#配置修改只在当前仓库gitconfig--globaluser.name"WritehereUsername"#配置更改全局生效#或者直接编辑配置文件gitconfig-egitconfig--global-e9.标签标签管理#列出所有taggit标签#创建一个新的taggit标签#创建一个带有注释的新标签gittag-a-m"mytag"#标签推送到远程gitpushorigin#deletetaggitlocallytag-d#deletetaggitpushoriginremotely:refs/tags/10.Other#当远程分支在本地分支之前,且本地分支有新的修改(新的修改还没有添加),执行以下命令解决可能的冲突#如果本地分支的修改已经添加,需要undoaddgitstashsave#临时保存修改gitpull#拉回远程更新gitstashpop#恢复修改,如果有冲突会提示手动解决冲突#取消跟踪一个文件,但不要删除磁盘上的文件gitrm--cachedxxx.txt#gitrebase替换merge使commitlog更简洁https://juejin.im/post/5d2d24245188250501477cc4#--no-ff表示禁止Git自执行“fast-farwardmerge”,目的是让版本演化的时间线更清晰gitmerge--no-ffdevelop