首先是git的简单下载 官网下载:https:gitscm。comdownload1。安装完git后操作1。全局配置gitconfigglobaluser。name用户名gitconfigglobaluser。email邮箱地址建议用户名和邮箱地址写GitHub账号2。建立仓库 当我们需要让Git去管理某个新项目已存在项目的时候,就需要创建仓库了。 可以在现有文件目录下创建仓库,也可以新建mkdir文件名创建目录作为git仓库cd文件名进入该目录gitinitgit仓库进行初始化,让git知道要管理这个目录 执行以上命令成功后,该目录下就会出现一个名为。git的隐藏文件夹(不要随意)2。git常用指令操作 git提交文件或代码,首先要提交到缓冲区,再提交到仓库 gitstatus:查看当前状态 gitadd文件名:提交文件到缓冲区gitadd文件名提交一个文件gitadd文件1文件2。。。。提交多个文件gitadd。或者。提交该目录下的所有文件(。代表当前目录,可以省略) gitcommitm注释内容将缓冲区的文件提交到版本库(注释内容很重要,代表当前你提交的东西和之前有什么不一样,回退版本时可以用到)3。版本回退 查看需要回退的版本需要通过查看日志3。1查看日志指令: gitlog〔option〕gitlog(日志信息很完整)gitlogall(显示所有分支)gitlogabbrevcommit(使得输出的commitId更短)gitlogstat(在gitlog的基础上输出文件增删改查的统计数据)gitlogprettyoneline(推荐使用,将提交信息显示为一行,日志信息只有提交编号和注释内容)gitlogoneline(和gitlogprettyoneline差不多,但是编号只有前7位)gitloggraph(以图的形式显现)gitreflog(用于恢复本地的错误操作,常用于3。3的场景) 注:(HEADmaster)表示该版本为当前版本b8b9c908c3d7ef9d9dec490d224c8aed0db503cf为提交编号(commitid)gitlog和gitlogprettyoneline可以显示所有提交过的版本信息,不包括已经被删除的commit记录和reset的操作gitreflog用于显示所有的操作记录,包括提交,回退的操作。一般用来找出操作记录中的版本号,进行回退。3。2为日志指令做别名首先在c盘的c:用户86147中打开gitBash在该目录下创建。bashrc(指令touch。bashrc)在。bashrc文件中写入别名化gitlog等选项,也就是说当我们在输入gitlog时执行的指令就是gitlogprettyonelineallgraphabbrevcommit指令gitloggitlogprettyonelineallgraphabbrevcommit然后再gitBash中输出指令source。bashrc3。3版本回退指令(回到过去):gitresethard提交编号(提交编号不用写全,git会自动识别,但是至少要写前4位) 注:当执行gitresethard提交编号后,版本会回退到该提交编号时的版本状态(即在该版本之后提交的文件或代码都会消失,而且提交记录也会消失)3。4回退到回退之前(回到未来) 当版本回退后,想要回到版本回退之前,那么想再次通过gitlogprettyoneline是不行的(版本回退之前的版本在该日志中已经消失了) 那么这时候就需要用到指令gitreflog gitreflog显示的日志中包含所有操作记录,提交,回退等操作(最前面就是简写的commitid)4。github等线上仓库的使用4。0与远程库进行对接gitremoteadd远端名称(一般为origin)远程仓库的地址(分为http和ssh)对接远程仓库gitremote查看所有远程仓库4。1基于http协议首先新建一个目录,然后git控制台进入该目录在GitHub中创建一个仓库并复制该仓库地址https:github。comjxnyzhnbjxnyzhnb。git在git控制台输入命令克隆该仓库到本地gitclone仓库地址然后该目录下会生成一个该以仓库为名的目录,该目录就是克隆的仓库4。2push指令gitpush指令是将本地仓库的文件提交到线上仓库gitpushf:强制覆盖,当本地代码和远程的代码修改了同一个东西,那么就会push失败,而f会强制覆盖远程仓库的代码。gitpushsetupstreamorigin本地仓库名:远程仓库名(用于指定本地仓库和指定远程仓库建立连接,第一次之后就不需要写setupstream) 首先前面提到,提交到本地仓库的步骤是: gitadd文件缓冲区gitcommitm注释本地仓库 现在提交到线上仓库需要在加一步: gitpush将本地仓库文件提交到线上仓库 gitpush远程仓库名本地分支名(将本地仓库的内容推送到远程仓库中)4。3pull指令 gitpull〔remotename〕〔branchname〕 gitpull指令是拉取线上仓库的文件到本地仓库拉取指令就是将远程仓库的修改拉取到本地并合并,等同于fetchmerge如果不指定远端名称和分支名,那么默认拉取并合并所有分支 总结:每天上班第一件事就是用gitpull拉去线上仓库的文件,每天下班最后一件事就是gitpush提交本地仓库的文件(其他时间可以不提交)4。4fetch指令 远程分支和本地分支一样都可以合并,只是先需要把远程仓库的更新都下载到本地,在进行操作 fetch指令:gitfetch〔远端名称〕〔分支名〕抓取指令就是将远端的更新都抓到本地,但是不进行合并gitfetch〔远端名称〕〔分支名〕gitmerge远端分支名(如果和本地分支名相同需要加上origin,比如originjxnyzhnb)将远程分支和本地分支进行合并如果不指定远端名称和分支名,那么默认抓取所有分支4。4(推荐)基于ssh协议 首先在Github使用ssh协议需要先生成公私钥对指令(这个需要安装openSSH来生成),GitHub需要公钥 安装完后,在git控制台中执行sshkeygentrsaCGitHub的注册邮箱 步骤:生成客户端公私钥文件将公钥上传到GitHub 实际操作:安装完openSSH后,执行sshkeygentrsaCGitHub的注册邮箱然后一直回车可以看到公钥放在cUsers86147。sshidrsa。私钥放在cUsers86147。sshidrsa 然后找到公钥文件复制文件中的所有内容,在GitHub中创建公钥并粘贴该公钥就行了 然后后续的步骤和http协议一致,只是是gitclonessh地址(gitgithub。com:jxnyzhnbjxnyzhnb。git)4。5总结 总结:推荐使用ssh协议进行和线上仓库的连接,一位http协议连接的话,可能要在每一个git项目中配置账号密码,因为可能出现403错误(需要鉴权)。 需要修改。git目录下的config文件中的 urlhttps:github。comjxnyzhnbjxnyzhnb。giturlhttps:用户名:密码github。comjxnyzhnbjxnyzhnb。git5。分支操作 在之前回退版本和回到未来时,我们可以看到所有的提交和回退记录都会有记录,Git会把他们传承时间线,形成类似于时间轴,该时间轴就是一个分支,也叫做master分支。 为了满足团队协作开发,我们需要使用分支来完成一些开发任务。5。0分支的种类master:线上分支,主分支。项目在线上运行的分支develop:开发分支,是由master创建的分支,作为主要的开发分支,开发完成后,将develop分支合并到master分支中(合并之后不会删除)featureXXX:有develop分支创建的分支,一般是同期并行开发,不同期上线时创建的分支,最后合并到develop分支中(合并之后直接删除)hotfix:是由master创建的分支,用于修复线上的bug,修复完bug后需要将该分支合并到master和develop分支中 由下图可以看出,当创建该项目是将该项目分为多个分支,当项目完成后需要将各个分支进行合并,将各个分支合并到主分支(master分支)中。 5。1分支相关的指令查看分支:gitbranchgitbranchvv:查看所有分支和远程分支的对应关系创建分支:gitbranch分支名切换分支:gitcheckout分支名创建并切换分支:gitcheckoutb分支名(属于gitcheckout和gitbranch分支名的结合体)删除分支:gitbranchd分支名强制删除分支:gitbranchD分支名合并分支:gitmerge要将被合并的分支名(将该分支和当前的分支进行合并)5。2各分支之间互不影响 比如以下操作: 当前分支是master分支: 这是在该分支下的readme。txt的内容: 现在切换到jxnyzhnb分支: 修改readme。txt文件内容: 保存后,在该分支中将该文件提交到本地仓库(一定要谨记,不要忘了该操作,不然没用) 再次切换到master分支:gitcheckoutmaster 查看readme。txt: (谨记)注:这说明各个分支修改文件后提交到本地仓库,那么只会改变这个分支中的文件,对其他分支不影响 但是,要谨记,在该分支中修改了一个文件,一定要提交到本地仓库,不然在其他分支中的该文件也会被修改。5。3各分支的合并 前面讲了,master分支的readme。txt(该分支的readme。txt并没有提交到仓库)和jxnyzhnb分支的readme。txt(已提交到仓库)不一样。 现在将两个分支合并 那么这时候如果将在master分支下将jxnyzhnb分支合并,那么master分支将会添加master没有的内容但是jxnyzhnb有的内容 比如两个不是主分支的分支也可以合并,但是当两个分支之间有相同的文件但是不同的内容,那么合并会出冲突。 这时候可以这样解决:解决冲突使用gitresetmerge取消合并,即回退到合并前5。4删除分支 gitbranchd分支 注:当要删除一个分支时,一定要退出要删除的分支,不然会删除失败6。解决冲突6。1合并冲突 当我们同时修改了同一文件的同一行(就是当一个人先修改了一个文件的一行并push到远程仓库,但是你也在自己本地修改了这个文件的那一行,那么当你想push到远程仓库时,会发生报错,因为发生冲突,这时候需要线pull文件,然后会出现merge错误,就是因为文件内容冲突,就会出现下面的代码样式,这时候你需要在本地解决冲突(先把git生成的东西去掉,在修改称自己想要的代码就行了)),然后再次push到远程仓库就行 当线上仓库的内容被更改时,我们并没有在本地仓库中用gitpull拉取下来,那么当我们将本地仓库中的内容进行push到线上仓库时,就会发生冲突,那么push就会失败,这时候就会有提示要gitpull,但是当执行该指令后,会发现线上仓库的被更改的内容会和本地仓库的内容发生冲突,比如一个readme。txt在本地仓库中是gg,gbf,但是在线上仓库就是abczh,fss,那么pull下来就会变成以下内容。HEADgit生成的HEAD指向的是当前分支gggbfgit生成的abczhfssec83f5d538076d3e19f4ef6b336eedfdd51105a0git生成的 这时候可以更修改该代码的人进行商量,是否删除哪一个部分或者都不删除,就只删除HEAD和jxnyzhnb(这两个是git自带的),那么再次将该文件进行push就行了当我们在本地创建了一个分支,但是却没有在线上仓库上创建该分支,如果在git命令行中在给分支中执行gitpush,就会因为本地的分支没有和远程分支建立联系而报错,就需要执行以下代码就可以正常push了gitpushsetupstreamorigin分支名(当前分支在远程分支对应的名称) 当当前分支在远程分支中并没有该分支,那么远程分支就会创建该分支。7。忽略文件 当我们再提交整个分支时,我们不想提交一些目录(比如css,js等),那么我们可以在该仓库目录下新建一个以。gitignore为后缀的文件(用命令行touch。gitignore创建),在里面可以定义规则(git默认不会提交空文件夹) 常见的规则:js忽略整个文件夹(这是。gitignore文件中的注释)。zip忽略所有以。zip为后缀得文件csssa。css忽略具体的文件!index。js不过来index。js文件 自定义的。gitignore提交时忽略js,css目录(这是。gitignore文件中的注释)jscss8。Idea集成git首先到setting中的git中选择git的安装目录(一般idea会自动检测,不用自己添加)把项目变成一个git仓库,点击idea头上的选项中的vsc或git,点击createnewrepository创建新仓库然后点击提交并推送,选择要推送的文件和远程仓库的地址在idea中左下角有git按钮,点击可以查看git的日志和提交的文件,在点击提交时间轴可以看到提交的文件的内容的变化如果要克隆,复制好远程仓库的ssh地址,在idea中选择clone就行了当出现冲突时,如果不去解决冲突会文件会爆红(即使去掉了git生成的代码也会爆红),这时候需要将该文件先gitadd到缓冲区。创建分支最快的方式是在git的log中对时间轴上的每个节点去创建新分支,那么该新分支的内容就是就是在该节点的分支的内容在idea右下角有一个按钮表示当前分支,点击该按钮可以进行切换分支,创建新分支,合并等操作。 注:在idea中切换分支之前切记要把原来分支新增加的代码先提交到本地仓库,不然切换分支后原分支新增的代码就会消失 可以把idea的终端变成gitbash(原来是cmd),在设置中的tool(工具)找到终端(Terminal),设置shell的路径为git中的bash。exe的路径(比如D:Gitbinbash。exe)