当前位置: 首页 > 后端技术 > Java

Git常用命令使用

时间:2023-04-01 15:45:37 Java

1基本概念1.1Git原理Git生成一个.gitpartitionsgit分为三个分区:工作目录(WorkingDirectory):开发者直接编辑的地方,只要有文件改变,都会显示在这里,包括跟踪和未跟踪的文件。通过gitadd将工作区文件添加到暂存区。暂存区(Stage|Index):暂存数据的区域,暂存区的文件通过gitcommit添加到本地仓库。本地仓库(LocalCommitHistory):存储所有提交的数据,并通过gitpush推送到远程仓库。2常用的git操作命令从创建版本库到推送到远程仓库、合并冲突、分支、rebase等操作,本次只介绍最常用的git命令。2.1创建仓库创建仓库,可以在本地使用gitinit命令创建仓库,也可以在远程仓库创建仓库,在远程创建readme.md文件,然后clone项目到本地,并跟进项目你的操作是基于这个存储库的。2.2添加操作gitadd//添加到暂存区(stage)gitadd.//全部提交到暂存区2.3提交操作gitcommit-m"description"//提交到本地库(必须先添加)gitcommit-am"description"//可以提交未添加的文件,但不包括新建的文件filesgitcommit--amend-m"description"//该命令会将暂存区的文件与最新的commit记录合并,修改提交信息为本次提交的提交信息。gitcommit--amend//和上面的命令类似,不同的是在合并本次提交和最新的提交记录时不会主动修改提交信息,需要在输入该命令后手动更改进入的vim编辑器,或者使用:q命令退出修改,使用上次提交的提交信息。2.4删除操作(delete)gitrm//从暂存区删除(stage)删除文件到暂存区,可以用gitcheckout恢复gitrm-f//修改删除前和暂存区中已经删除的文件可以是文件夹也可以是文件。删除位置和恢复同上。也就是说,从跟踪列表中删除2.5即可undoaddgitcheckout//恢复未提交的修改,将修改后的文件恢复到上次提交时的状态,《注意》:使用gitcheckout取消添加的文件是不行的被恢复。使用前必须确认当前add修改项没有gitresetHEAD//取消之前的gitadd添加,取消add即可,不会影响工作区的内容。2.6Undocommit当你在本地提交了代码,但是此时你想撤回提交,重新编辑修改。这时候你可以用gitreset来完成。本次撤销分为是否保留修改。保留修改:gitreset--soft,之前所做的修改都在,也叫最安全的undo。放弃修改:gitreset--hard,之前所做的修改会消失,谨慎使用。2.7版本回滚gitreset--hardHEAD~//回到上一个版本gitreset--hard//回到指定版本2.8文件状态查询修改文件时,可以使用gitstatus查询此文件的状态。一般使用该命令查询当前工作空间中那些被修改过的文件,如图:我们可以看到readme.md和.DS_Store文件被删除,add文件被添加,并且你好已被修改。.txt文件,它们的颜色代表当时的状态,绿色表示已经保存在暂存区,红色表示只保存在工作区,还没有提交到暂存区保存。2.9拉取代码gitpulloriginmaster//(如果要拉取到本地的dev分支,先gitcheckout-bdev,然后使用gitpullorigindev,这样本地的dev分支绑定到远程的origin/dev就ok了)gitpull--rebaseorigin//多人开发一个项目时,可能多人同时修改同一个文件。当a修改了这个文件推送到远程,b也修改了这个文件,他推送就失败了。这时候如果他使用gitpull命令,会多出一条merge记录,可以通过--rebase来避免。gitfetch//查看远程仓库是否有更新,有更新就下载,没有更新则没有响应gitpull--rebase命令的详细介绍可以参考gitpull--rebase2.10推送代码的正确使用gitpush<远程仓库名><远程分支名>2.11分支多人开发一个项目时,每个人开发的业务不同,如果都使用同一个分支进行开发,会混乱。这时候就需要用到多分支开发技术。首先,我们可以使用gitbranch命令查看当前在哪个分支,当前仓库有哪些分支。使用gitbranch--remote命令查看远程分支。当我们需要创建一个新的分支时,我们可以使用gitbranch来创建一个新的分支,这个分支是在当前分支的基础上创建的,所以它和当前分支的代码是一样的,当我们需要的时候删除一个分支,我们可以使用gitbranch-D来删除指定的分支。使用gitpush-dorigin删除远程分支并创建分支后,可以使用gitcheckout切换到指定分支,这样可以并行开发多个分支。我们也可以使用gitcheckout-b创建一个新的分支,同时切换到这个分支。2.12合并分支如果我们在开发的时候使用了dev分支,那么在项目上线的时候需要将dev的代码合并到master分支中。这时候我们使用命令:gitmerge。我们首先需要使用gitcheckoutmaster切换到master分支,此时使用gitmergedev将dev代码合并到master,或者devpush代码到远程,或者使用gitmergeorigin/main合并将远程指定分支的代码合并到当前分支中。建议在这里使用gitmerge--no-ffdev--no-ff来禁用快进合并。当Git合并两个分支时,如果你沿着一个分支走可以到达另一个分支,那么Git会在合并两者时简单地将指针向右移动,这被称为“快进”,如下图:A---B---Cdev/D---E---Fmaster要将dev合并到master中,执行如下命令$gitcheckoutmaster$gitmergedev结果会变成A---B---Cdev/masterD---E---F因为dev是master的下游,直接移动了master的指针,master和dev都指向了C。而如果执行gitmerge--no-ffdev,则结果如下:A---B---Cdev/\D---E---F-------------Gmaster由于--no-ff禁用快进,master指向G会生成一个新的commit。从合并后的代码来看,结果其实是一样的,不同的是--no-ff会让Git生成一个新的commit对象。为什么?通常我们以master为主分支,存放比较稳定的代码,很少提交,而dev是用来开发feature的,上面会有很多零散的提交,而fast-forwardmerge会合并dev的提交,历史是混杂的进入master,搞乱了master的提交历史。所以如果你根本不关心commithistory,也不关心master是否干净,那么--no-ff其实是没用的。但是,如果有一次master出了问题,需要回滚到之前的版本,比如上面的例子,你会发现你回滚的是一个版本到B,而不是想要的F,因为historydev已经合并到master里面了。2.13暂存当我们在开发代码的时候,有人推送了一个很重要的代码到远程。不拉,项目就启动不了。这时候,如果我们commit未开发的代码,以后再pull,就会产生无用的commit信息。这时候我们使用gitstash命令。gitstash可以将你还没有提交到本地(和服务器)的代码推送到Git栈中。这时候你的工作区和上次提交的内容完全一样,你就可以放心拉取代码了。拉取代码后,可以使用gitstashpop命令将保存的代码恢复到工作区。2.14将本地项目推送到远程仓库。当我们在本地新建项目时,需要将其保存到远程仓库中。这时候,我们首先要做的就是将本地项目与远程项目关联起来。我们先查看本地是否关联了远程仓库地址,使用命令gitremote-v查看是否关联了远程仓库。如果已经关联,则需要更换关联的仓库。首先删除本地关联,使用gitremotermorigin命令,然后使用gitremoteaddorigin命令关联需要关联本项目的仓库,然后拉取远程代码到本地。直接使用gitpulloriginmaster命令会报错:fatal:refusingtomergeunrelatedhistorys。这是因为两个根本不相关的git库,一个是本地库,一个是远程库,然后本地库是要push到远程端的。远端认为这个本地库和自己没有关系,不能合并就可以使用:gitpulloriginmaster--allow-unrelated-histories。//允许不相关的历史记录合并进行强制合并,这样两个仓库的合并就完成了,后续操作可以正常进行。2.15Rebasegitrebase和gitmerge的区别如上图所示,rebase的作用是修改历史,将分支历史合并到主线。Rebasing实际上是一种合并分支的方式。我们可以切换到dev分支,然后使用gitreabsemaster命令合并分支。当有冲突时,使用:gitaddtest.txtgitrebase--continue合并冲突,然后我们可以切换回master分支,快速合并两个分支。2.16git本地配置使用gitconfig--list查看所有本地配置可以使用gitconfig--globaluser.name"name"设置全局用户名,使用gitconfig--globaluser.name查询。使用gitconfig--globaluser.email"email"设置全局邮箱,使用gitconfig--globaluser.email查询。3使用IDEA中集成的git3.1在intelliJIDEA中使用git首先需要在你使用的IDEA中配置git(我用的是intelliJIDEA)。然后,你可以看到上面的想法。接下来,您可以使用该想法附带的工具。git从左到右操作这些按钮,表示拉取、提交、推送、历史记录和回滚。在idea的右下方可以选择切换分支、创建分支、合并分支、比较差异、rebase等功能,甚至在idea左下角的功能区提供了一个git功能按钮。点击后可以看到如下内容:其功能包括以上两部分功能的总和。可以看到每个分支每次提交的详细信息,pull和push到指定分支,delete,rebase,返回指定分支到Scroll到指定commit记录等。在idea上面的git功能组件中,有甚至还有在GitHub上创建一个与项目同名的远程仓库,并将项目推送到元旦的功能。这样就避免了2.14中提到的问题。3.2VSCode使用git。在vscode的左侧功能栏中有一个源代码管理功能按钮。当你点击它时,会显示上图的效果(当项目没有用git初始化时)。这时候可以点击Initializetherepository将项目放到本地仓库中,也可以点击SendtoGitHub将代码直接发布到GitHub,类似于idea的共享项目功能。如果是已经初始化的项目,点击后会显示未提交暂存的文件列表。您可以点击文件查看其修改记录。当你需要添加、提交、拉取、推送文件时,我们可以看到可以点击相应的功能按钮进行git功能操作。vscode左下角显示的两个按钮分别对应分支视图和远程仓库同步的功能。