Git

前言

话语

希望你有一定的阅读文档能力,
并且使用过svn和git经历
这篇文章主要是提升你git的使用技巧,
知道与svn的区别

编写人员

隐无为

1.git 介绍和安装

1.1.git安装

https://git-scm.com/

1.2.小乌龟git安装

https://git-scm.com/

1.3.Idea关联git软件

图片1.png

2.Git 操作

红色:创建之后没有add,没提交
绿色:add之后是文件绿色的,没有提交(commit);
蓝色:原本有一个文件,改动过后没有提交(commit)是蓝色的,提交之后,变成正常颜色。
白色:正常色,提交了
灰色:删除色

2.1.提交commit

创建a.txt 测试文件 图片2.png

正常来说你需要add,再然后commit,当然是可以直接commit Commit 等同 add+提交本地库

图片3.png

填写提交的注释

图片4.png

2.2.推送push

图片5.png

2.3.更新pull

图片6.png

2.4.注意细节

add     是提交到临时存储区
Commit  是提交本地库
Push    是提交远程库
Pull     是获取远程库代码,放到工作区
Conflict  是本地库与远程库冲突(不是工作区) 

一定要学会看idea 的 提交日志记录查看插件

图片7.png

图片8.png

3.Git解决冲突

冲突产生的原因是有多人同时操作了同一个局域代码

解决冲突,是团队配合,经常出现的。

分析两种人的说法:

有些人认为git 在提交代码之前,先pull(更新)代码,解决冲突,再提交
类似svn的操作

也有人认为可以直接先提交commit到本地库,再pull,解决冲突,然后push

3.1.先pull的情况

当你pull更新代码,就会发现这个错误

图片9.png

报这个错误的原因:
远程库的更新的过来的代码有修改,
而你的代码也有修改,可能有冲突,
希望你先提交,再pull

说白了就是冲突亮牌警告 (警告是不会把代码更新下来的)

3.2.先commit的情况

提交到本地库,然后再更新pull,就会发生冲突

图片10.png

Accept  yours :用你的代码
Accept  theirs :用他们的(远程库的)

Megre :选择性合并两边代码。(一般选择这个)


解决冲突,合并代码

图片11.png

左边:是你的代码
中间:就是你最终合并想要的代码
右边:  远程库的代码

3.3.结论

所以,git和svn提交方式不一样, Git 先提交到本地库,然后pull更新的代码 最后解决冲突

4.git进阶

4.1.git 找回删除的文件

如果其他人删除a.txt,并提交,push推送远程库
那我怎么找回被他人删除的文件(可能同事不小心删你的文件)

图片12.png

Git reset hard 就会还原当时的版本,把删除的代码备份下,再回到
最新的版本,把备份的代码拷到最新版就行了

图片13.png

图片14.png

4.2.Git 回退版本降级

有时候不小心多提交了一些文件或本来只开发自己的功能模块,
把同事的模块提交到了远程库了,想回退怎么办?

Git revert 就可以回退版本 

注意:回退版本是点击当前版本回退上一个版本

图片16.png

图片17.png

5.git分支

项目越来越大了,建立分支是必然的,在分支上做开发,调试好了后再合并到主分支。并且有利于发布测试。

5.1.创建分支

右下角点击git,目前是主分支

image.png

新建分支名称,最好命令规范-dev-名称-功能

image.png

可以发现,当分支创建好之后idea会帮我切换到刚刚新建的分支上

image.png

注意,这个浅黄色的令牌就是代表项目当前处于哪个分支,当然你也可以看右下角git的名称 image.png

把当前分支推送到远程仓库去,让其他人也能获取你的分支

image.png

image.png

5.2.切换分支

有时候我们需要来回切换分支,比如我们想切换到原来的主分支master去

image.png

注意在切换分支很容易犯的问题:
如果有master分支和dev-test分支这个两个分支,而当前分支是dev-test,我在dev-test分支写了一个a文件没提交,就直接切换到master分支上,就会发现master分支也会有a文件,这就是git在切换分支的特性,把没提交的内容的会带到切换后的分支上。git这个设计初衷是好的,但是我们经常因为这个特性造成不必要的麻烦。

假设一个场景

领导安排我做一个新的功能,是支付功能,我按照公司规范,在master分支上新建了dev-pay-支付分支,我开始霹雳吧啦敲了一些代码,突然领导说主分支master有一个紧急的bug要我去修复,如果我直接切换到主分支的话,git会把我刚才敲的支付代码带到主分支去,这是我不愿意看到的情况,那怎么办?
方法一:切换分支前提交代码。
方法二:切换分支前,如果都不想提交代码,毕竟有可能写的那部分代码有问题,
其他同事更新分支代码可能会报错
可以stash缓存代码.主分支修复完bug再切换回支付分支,
在还原unstash缓存代码

image.png

5.3.删除分支

可能不小心建错了或不需要这个分支了,就可以删除分支

image.png

注意:删掉分支,要切换到其他分支才有删掉功能

5.4.合并分支

当功能开发好了,需要合并到主分支上,或者要合并其他同事的分支

我们在切换到dev-test-测试分支上提交一个文件

image.png

image.png

我们在切换到主分支master去,发现没有刚刚提交的 a文件,这时候我们需要合并分支

image.png

主分支master 合并 dev-test-测试分支

image.png

注意: merge into current 的意思:我们当前分支是master,点击dev-test-测试分支合并当前分支master

若合并分支发现代码冲突,和之前解决冲突方式是一样的,最后不要忘了推送master代码到远程库。

6.版本令牌

细心发现,版本日志插件,有几个不同颜色的令牌

image.png

黄色:head,当前项目处于的版本
绿色:本地分支的名称
紫色:远程分支的名称

7.提升技巧: Cherry-pick-樱桃

cherry-pick 的意思是择优挑选自己所需要的提交。

比如一个场景,领导吩咐我和另一个同事A共同完成一个用户数据的功能,我们建立了一个分支
名称是dev-user-用户,我们都在这个分支上完成功能,我完成查和删功能,同事A完成增改功能,两天后,我完成的功能没问题,但是同事A没完成或有bug,但是领导突然说要上线,把我们的分支合并到主分支master上,如果直接合并的话会把同事A的没完成的代码合并了,线上代码会有问题,这时候领导说先把完成的好的功能查询和删除先上线,没完成有问题的代码在下面维护好了在上线。这时候就需要git有一种能挑选代码的功能,没错,cherry-pick 樱桃闪亮登场

开始模拟上面的场景,创建dev-test--用户分支,我提交一个代码文件,同事A提交一个代码文件 把我的提交的记录的代码文件合并到主分支去

image.png

切换到主分支去,然后选择樱桃合并到主分支

image.png

image.png

image.png

最后:

如果同事A完成了任务,就可以直接合并dev-test-用户这个分支或者樱桃

8.git最佳实践

在公司开发,作为领导,最好划分下分支策略:
主版本分支-master-用与发布稳定版本的
开发分支-dev-用与开发维护的版本的(领导在此分支把控开发人员的分支是否合并)
功能分支-feature-开发人员开发功能的分支

分支的命名规范:
dev-名称-功能
feature-名称-功能

合并分支策略:
功能合并到开发分支上去
开发分支合并到主分支上去
当然啦,可能还需要
还有一些测试分支和维护bug分支
每发布一个重大版本也需要打上标签版本(等等标签是什么东西,学到这里我觉得你也差不多了,自己试下应该就会了)

9.还是来个彩蛋吧

9.1.新建标签

image.png

9.2.不小心关闭冲突的窗口

怎么办?

image.png

Last Updated: 6/13/2019, 7:10:41 PM