git介绍与安装
介绍
- 工作区
- 工作区的文件,你不经过任何处理,他是不会被git管理的
- 暂存区
- 对文件的增删改,需要add才能加入暂存区,暂存区有点像购物车,你修改一个文件,add一下,就相当于加购,当你做了一系列的修改后,暂存区,就会形成一个预提交的列表,最后确定可以修改了,你可以一次性提交,形成一个新的版本
- 本地仓库
- 当执行commit会将暂存区的文件提交到本地仓库,形成一个新的版本。
- 远程仓库
- 没有远程仓库,我们的代码照样能被管理,只不过是本地管理,有了远程仓库,我们可以把成熟的代码与人共享,远程仓库有国外的github也有国内的码云,我们这里使用码云
git安装
- git可以在mac、linux、window上安装,我们这里只演示window上安装
- 下载地址:官网 https://git-scm.com/ ,官网比较慢,通过淘宝镜像 https://npm.taobao.org/mirrors/git-for-windows/
- 下载下来后,一路next即可。安装完毕后,鼠标右键可以看到如下东东。
配置自己的账号
-
你是谁?
$ git config --global user.name zhuximing
-
怎么联系到你?
$ git config --global user.email 569591357@qq.com
-
如果想修改全局配置,你可以如下改:
$ vim ~/.gitconfig
本地仓库的增删改查
创建本地仓库
- 切换到某个工作区(某个目录),在工作区执行git init既可以创建本地仓库。git init不仅创建仓库,还自动帮你创建了master分支。
- 注意:不要把本地仓库建在中文目录下,也不要去修改.git文件夹,那不是你能碰的东西。
添加文件到本地仓库
- 1:在工作区,新建文件hello.java
- 2:执行git status,可以查看工作区的文件状态
添加文件到本地仓库
-
1:在工作区,新建文件hello.java
-
2:执行git status,可以查看工作区的文件状态
- 3:执行git add hello.java 或者git add . 点代表当前目录所有的文件。
-
4:你可以反悔,如果你觉得不对,你可以执行如下命令撤销
git rm --cached hello.java 或 git reset hello.java
-
5:如果确定没问题,执行commit提交到本地仓库
$ git commit -m ‘hello.java第一次添加’
//注意:-m 提交日志,一定要写日志,不然报错。
//commit无需执行提交哪个文件,因为commit提交的是整个暂存区。
修改文件
- 修改文件后,在添加文件一样需要两个步骤
- 1: 添加到缓存区
- git add hello.java
- 2: commit到本地库
- git commit -m ‘hello.java做了修改’
删除文件
- //手动删除文件后执行add命令加入预提交列表
- git add .
- 查看状态
- git commit -m ‘删除了hello.java文件’
- 增删改操作,如果你不想先add 后commit,你可以直接commit 但是需要加-a命令参数,如:
- git commit -a -m ‘添加文件’
- 总结:1:无论你做了什么操作,基本两个步骤,add添加到预提交列表,commit将预提交列表一次性提交到本地库。
- 2:当你迷茫的不知道下一步干啥的时候敲git status,git会告诉你,你应该干什么。
从本地仓库推送到远程仓库
将本地仓库代码提交到码云
1:创建远程仓库
2:清空远程仓库
3:本地仓库推送到远程仓库命令:
$ git push https://gitee.com/zhuximing/test.git master:test
注意:master为本地仓库master分支,test为远程仓库test分支
每次写这么长的远程地址很麻烦,我们可以给地址取个别名,命令如下:
$ git remote add yuanfang https://gitee.com/zhuximing/test.git
4:使用别名推送代码
$ git push yuanfang master:test
注意:推送的并不是工作空间的代码,而是本地仓库的代码。
查看本地操作日志
- 前言:先不考虑远程仓库,我们先把本地操作玩熟。当不考虑远程仓库的时候,咱们也不用考虑合并冲突的问题,因为你的本地库只有你在操作,别人也没法干涉。接下来我们一起学习本地仓库的一些常用操作。
查看日志
1:git log 看版本日志
git log --pretty=oneline
2:git show看日志细节
文件版本分支
1:为什么要分支
-
场景:项目集成完支付宝支付功能后,就开始上线了,上线后有两个任务必须要做,
-
第一个,线上如果出现bug无条件,第一时间抢修.
-
第二个老板要求尽快集成微信支付功能.
-
好,问题来了,这两件事情先做哪一个?
-
先改bug,bug要等用户用了才知道,难道干等着?
-
先做功能,但是如果功能做到一半,bug出现了怎么办,撤回到发行版本?那之前做的功能不就没了吗?
-
解决方案:
-
注意:master不能是开发中间代码,即master不能是半成品,一般都是成熟的功能迭代。
2:创建分支
-
查看当前有哪些分支
$ git branch //看本地分支
$ git branch -a //看远程分支 -
创建分支:
$ git branch fixbug_branch //创建分支,此时该分支的进度和master的进度是一致的。
$ git checkout fixbug_branch //切换到fixbug_branch分支
接下来在该分支的修改都不会影响到master分支。 -
$ git push https://gitee.com/zhuximing/test.git fixbug_branch:fixbug,推到远程仓库和别人一起协作开发该分支
3:删除分支
- $ git branch -d fixbug
4:分支的合并
- 如果bug已经修复好,这时候我们需要将bug分支代码合并到master
- 1:先切换到master分支
- $ git checkout master
- 2:合并
- $ git merge fixbug //从fixbug分支合并到master分支
5:合并分支冲突
- 如果master分支不动,不修改,不提交,只改fixbug分支,这种情况合并是不会冲突的。
- 但是如果master和fixbug同时修改,提交,前进,而且改同一个文件,那么合并的时候就会冲突
- 冲突演示:
-
切换到fixbug分支,修改a.txt文件,并提交
- $ gi add .
- $ git commit -m ‘fixbug 修改了a.txt’
-
切换到master
- master,耐不住寂寞,也修改a.txt(实际开发中是不修改master代码的,这里只是为了演示冲突,不得已修改哈)
- $ git add .
- $ git commit -m ‘master 修改了a.txt’
-
合并失败
-
解决冲突:
- 1:谁改的master,谁改的fixbug,站出来,你们一起商量下怎么合并
-
2:最终商量的结果
-
3:提交
-
$ git add .
-
$ git commit -m ‘分支合并冲突已解决’
-
6:版本切换
-
先看看我们的HEAD当前指在哪个版本
-
$ git reset --hard HEAD^ //你工作区和本地库都回退到上一个版本。
-
$ git reset --hard HEAD^^//你工作区和本地库都回退到上上一个版本。
-
注意:这种操作少做,即使要做,也最多只切换到最近一个版本。
git的团队合作
邀请新成员
同意邀请
[克隆]第一次下载代码:
- 注意:1:-b test :表示克隆的是远程仓库的test分支代码
- 2:克隆的是test分支,那么git会在本地也自动帮你创建test分支
克隆结果:
第n次更新代码协作开发(不考虑冲突的情况)
-
全村的希望
-
新建d.txt —add—>暂存区------commit----->本地库-------push------>远程库
-
命令如下:
$ git add . //添加当前目录所有改动到暂存区。
$ git commit -m ‘add d.txt’//将暂存区的改动列表一次性提交到本地库,生成一个新的版本。
$ git pull https://gitee.com/zhuximing/test.git test:test //让本地库和远程库同步,这是非常好的习惯。
$ git push https://gitee.com/zhuximing/test.git test:test//将本地库的改动推到远程库。
注意:test:test,表示将本地库的test分支推到远程库的test分支 -
小提示:要在一台电脑上演示2个用户操作的效果,需要改下git本地配置文件(不是全局配置文件)
-
$ vim .git/config
-
全屯的希望
-
修改a.txt —add—>暂存区------commit----->本地库-------push------>远程库
$ git add . //添加当前目录所有改动到暂存区。
$ git commit -m ‘change a.txt’//将暂存区的改动列表一次性提交到本地库,生成一个新的版本。
$ git pull https://gitee.com/zhuximing/test.git test:test //让本地库和远程库同步,这是非常好的习惯。
$ git push https://gitee.com/zhuximing/test.git test:test//将本地库的改动推到远程库。 -
如此往复,只要全村的希望和全屯的希望不去修改同一个文件,日子永远是美好的,按照上面的操作,开开心心把项目做完。
注意:每一次push记得先pull,要不然如果远程仓库的HEAD和你本地库的HEAD不一致的时候,即使没冲突也不让你提交的
代码合并冲突
-
当全村的希望和全屯的希望,只要不改同一个文件,每次pull的时候都是不会冲突的,但是如果他们俩修改同一个文件,那么在pull的时候必然冲突。
-
冲突演示之全村的希望操作:
$ git add .
$ git commit -m ‘我全村的希望修改了a.txt’
$ git pull //很好的习惯
$ git push https://gitee.com/zhuximing/test.git test:test -
冲突演示之全屯的希望操作:
$ git add .
$ git commit -m ‘全屯的希望修改了a.txt’ -
注意:全屯的希望在push之前要先pull,这时就会将远程代码合并到本地库,冲突马上发生
-
git status,看状态
-
既然无法合并,出现冲突,接下来怎么解决冲突呢?思路有三.
-
1:将全村的希望喊过来,两个人坐下来有话好好说,商量下怎么合并。
-
商量最终的结果
-
2:提交
$ git add .
$ git commit -m ‘商量最终的结果’
$ git push https://gitee.com/zhuximing/test.git test:test -
3:全村的希望回到座位,pull代码
$ git pull
接下来,继续干活. -
为了防止大面积的冲突,几条血的建议
- 1:写代码之前先 git status看有没有没 未提交的修改,然后git pull同步下代码.有冲突解决冲突,没冲突更好.
- 2:尽量小步快走,写一点push一下,别等写了n个月再push一次.
忽略文件
-
在你的工作空间中有很多文件是你不希望与人共享,或者提交的,这些文件你可加入忽略文件列表。
-
1:在.git文件夹的同级目录创建.gitignore文件 (如果远程仓库有该文件,你就不要多此一举去创建,直接pull下来是一样的)
-
2:提交到本地仓库,并推送到远程仓库
$ git add .
$ git commit -m ‘添加忽略文件’
$ git push yuanfang master:master -
3:好了,现在你在本地新建db.properties文件你会发现git不追踪了,你修改该文件也不追踪
idea同步提交代码到码云gitee和github
之前一直使用的github,但是访问比较慢,一些方法可以提高访问速度的,但总是不够友好,加上国外可能存在禁用因素,作为国人应该不能完全依赖外网,于是果断选择国内的码云作为代码托管平台。以下内容是关于github上代码迁移到gitee,并可实现提交代码同时提交到gitee和github上。
1、从github迁移仓库到gitee
访问码云官网,新建仓库时有个从其他网站导入的功能,可选择性的将仓库导入,如下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LpeJ8Br3-1678242619179)(image-20230225110847039.png)]
2、本地提交文件同步提交到gitee和github
2.1 gitee配置公钥
之前有提交过github是肯定都配置了公钥,这个公钥也可以用在gitee,可在对应登录用户的如下目录找到
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lgmaQjog-1678242619179)(image-20230225111123756.png)]
用编辑器打开id_rsa.pub文件复制里面的内容。到gitee里配置公钥如下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qnbVsIDs-1678242619179)(image-20230225111253675.png)]
2.2 配置git,实现同时提交代码
到本地代码目录里找到.git目录(是个隐藏目录),展示出隐藏目录
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RFR5grvM-1678242619179)(image-20230225111519213.png)]
进入.git目录用编辑器打开config文件,如下将gitee的也配置上即可。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6WrKJwTh-1678242619179)(image-20230225111702230.png)]
idea安装gitee插件,并配置自己的gitee账号
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yeaIY9xp-1678242619179)(image-20230225112156827.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jJfaJPPK-1678242619179)(image-20230225112342047.png)]
idea修改文件push即可同时提交到gitee和github了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-24zmswVL-1678242619180)(image-20230225112630914.png)]
常见问题解决
Please make sure you have the correct access rights and the repository exists.问题解决
用编辑器打开config文件,如下将gitee的也配置上即可。
[外链图片转存中…(img-6WrKJwTh-1678242619179)]
idea安装gitee插件,并配置自己的gitee账号
[外链图片转存中…(img-yeaIY9xp-1678242619179)]
[外链图片转存中…(img-jJfaJPPK-1678242619179)]
idea修改文件push即可同时提交到gitee和github了
[外链图片转存中…(img-24zmswVL-1678242619180)]
常见问题解决
Please make sure you have the correct access rights and the repository exists.问题解决
https://blog.csdn.net/lw545034502/article/details/90696872