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

工作中常用的git命令

时间:2023-03-28 19:37:19 HTML

今天加班了。顺便记下Git的基本配置和常用命令。我亲自尝试了Git配置来了解版本控制。什么是版本控制?我真的需要它吗?版本控制是一种记录多个文件内容的系统,供将来参考特定版本的修订状态。什么是分布式版本控制系统分布式版本控制系统(DistributedVersionControlSystem,简称DVCS)。在Git、Mercurial、Bazaar和Darcs等系统中,客户端不仅提取最新版本的文件快照,而且完整地镜像原始代码存储库。这样,如果任何一个用于协同工作的服务器发生故障,之后可以用任意一个本地镜像仓库进行恢复。因为每次提取操作其实都是代码仓库的完整备份Git常用命令git-systemconfigurationgitconfig-lgit-globalconfigurationgitconfig--global--list#可以设置全局公共标识的邮箱和用户名gitconfig--globaluser.name'xxxxxx'gitconfig--globaluser.email'xxxxx@xxx.com'项目单独git配置#查看gitconfig--list#为项目设置单独的user.name和user。emailgitconfiguser.name'xxxxxx'gitconfiguser.email'xxxxx@xxx.com'Git初始化本地初始化gitinitremotepullgitclone远程仓库地址本地仓库与远程仓库关联#local-establishassociation-remotegitremoteaddorigin远程仓库地址#local-unassociate-remotegitremotermoriginGit保存并提交查看状态gitstatus查看所有文件修改详情gitdiffHEAD查看指定文件的修改详情gitdiffHEAD./README.mdaddandsave".":所有修改过的文件gitadd。或者gitadd./home.vue添加保存说明(提交到本地仓库)gitcommit-m'添加本次保存的描述'拉取代码多人协作开发时,提交前拉下代码,解决以后可能出现的冲突gitpullorigin分支名提交代码gitpushorigin分支名Gitcommitlog查看commit记录查看过去的commit记录可以显示所有提交的版本信息,不包括已经删除的commit记录和reset操作gitlog--pretty=oneline控制显示的条数itemsgitlog-30--pretty=oneline图形显示当前分支的版本演化信息gitlog--graph按作者名查看提交记录gitlog--author="John"搜索提交历史,根据tokeywordgitlog-Skeyword按日期搜索过滤gitlog--after="2023-2-1"并根据提交信息提交gitlog--no-mergesorgitlog--merges比如你的团队规范要求提交信息中包含相关的issue号,你可以使用如下命令显示所有与此相关的提交issuegitlog--grep="JRA-224:"查看当前版本标志gitreflog是Git操作的安全保障,它可以记录本地仓库几乎所有的变更,包括所有分支的commit提交,以及删除的commitgitreflogGitreturns回到某个版本,回到上一个版本gitreset--hardHEAD^#回到上一个版本gitreset--hardHEAD~3#回到上一个版本gitreset--hardbae128#返回到版本回退点之前的所有信息HEAD说明:HEAD表示当前版本HEAD^上一版本HEAD^^上一版本HEAD^^^上一版本等等...可以用~数字来表示头~0表示当前版本HEAD~1上一个版本HEAD^2上一个版本HEAD^3上一个版本依此类推...git分支指令查看已知分支gitbranch-a切换分支gitcheckout分支名称创建本地分支gitbranchnew分支名#创建并切换到新分支gitcheckout-bnewbranchname根据指定版本号创建分支gitcheckout-bbranchname提交ID将本地分支推送到远程仓库gitpushoriginnewbranchname删除本地一个分支这是一个“安全”操作,因为Git阻止我们删除具有未合并更改的分支gitbranch-dbranchname强制删除本地分支,即使它具有未合并的更改。如果想永久丢弃与特定开发线相关的所有提交,可以使用这个命令gitbranch-D分支名删除远程仓库的一个分支gitpushorigin--delelte分支名显示所有远程仓库查看仓库源namegitremote-vUpdatetheremotebranchlistgitremoteupdateorigin(仓库源名)--prune将所有分支推送到远程仓库gitpushorigin(仓库源名)--all强制将当前分支推送到远程仓库,即使如果有冲突gitpushorigin(仓库源名)--forceGitMergeBranch想把develop分支合并到master分支gitcheckoutmaster#先切换到master分支gitpulloriginmaster#如果是多人开发,需要拉取远程master上的代码gitmerge--no-ffdevelop#然后我们将develop分支的代码合并到master上关于gitmergedevelop和gitmerge--n的区别o-ffdevelopgitmergedevelop====>结果会变成A---B---Cdevelop/masterD---E---F执行完这句话,因为develop在master的下游,指针master的直接搬过来,master和develop都指向C,如果执行gitmerge--no-fffeature,结果如下:gitmerge--no-ffdevelop====>结果会变成A---B---Cdevelop/\D---E---F------------Gmaster因为--no-ff禁用快进,所以会生成新的提交,master指向G。从合并后的代码来看,结果其实是一样的。不同的是--no-ff会让Git生成一个新的提交对象。通常我们以master为主分支,所有的稳定代码都存放在上面。特性是用来开发特性的,上面会有很多零散的提交。fast-forwardmerge会将feature的提交历史混入master中,扰乱master的提交历史。gittags查看标签列表gittag-l在本地添加taggit标签-a标签名-m'versionnote'查看标签信息gitshowtagname在本地删除一个taggit标签-D标签名orgittag-d标签名pushlocaltagto远程仓库gitpushorigintagnamedeleteremotewarehousetaggitpushorigin--deletelabelname小记在cmd中使用log命令,不会自动退出,需要在英文状态下手动按q退出Git常见错误1、修改最后的commitmessage-commitmessage写错了(按i编辑,编辑完按ESC,如果保存退出使用:wq,只退出输入:q,如果出错直接退出不保存使用:qa!)gitcommit--amend#此命令将打开编辑器并允许更改最后的提交消息2.Git撤回提交,但不会推送内容gitloggitresete102c05227bca7517554777f589f130305b69427#保留提交到工作区之前的更改3.roll将单个文件回退到指定版本.(commitID)vue.config.js#Restorethefiletotheversionyouwanttorestore4.解决冲突只要所有的开发者都遵循这个规则,解决冲突是非常容易的。比如我的分支叫做dev分支。我修改了代码,现在不知道有没有冲突。在dev分支,执行命令gitmergeorigin/master,将远程master分支合并到当前dev分支。如果没有报错,则直接执行第5步。如果有冲突,根据提示解决冲突并保存文件。然后执行命令gitaddxxx将你修改的文件添加到缓存中。然后执行命令gitcommit-m"xxx"添加commit信息。执行如下命令切换到master分支:gitcheckoutmaster。执行命令gitpull,确保当前master分支是最新的代码。将dev分支的代码合并回master分支:gitmergedev。提交代码:gitpush。