Git

git

介绍与安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
0 git,github,gitee,gitlab
-git:版本管理软件
-github:网站,全球开源代码,放在上面,我们可以看到,并下载--》本质是一个git的远程仓库
-gitee:中国版的github,公有,私有(中小型公司的代码放在私有仓库中)
-gitlab:公司内部的(公司内部的github)

1 git:软件,实现 版本控制:协同开发(多人合作开发),合并代码

2 下载:https://git-scm.com/download/win
一路下一步

3 装完后,任意位置,鼠标右键,多出
git gui here:图形化界面
git bash here:命令行

4 git和svn
-git的版本管理不需要服务端(远程仓库)
-svn要进行版本管理,必须有服务端

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 分为三个地方
1 工作区
2 暂存区
3 版本库


# 命令
git init # 初始化仓库,在当前路径下生成一个.git文件夹,隐藏的
git add . # 把工作区的更该(.表示当前路径下所有更改,都提交),提交到暂存区
git status # 查看文件状态(绿色表示,在暂存区,不在版本库,红色表示工作区更改了,没有提交到暂存区)
git reset . # 把提交到暂存区的,拉回到工作区(以后基本不用)

git commit -m '注释' # 把暂存区的所有内容,提交到版本库

#在提交到版本库之前,要先配置用户信息 (--global:表示全局,在用户家路径.gitconfig)
git config --global user.email "306334678@qq.com"
git config --global user.name "liuqingzheng"

# 局部的用户信息,是在仓库的.git文件夹下的config中
git config user.email "33@qq.com"
git config user.name "egon"


git log # 查看版本提交的日志(谁提交的,提交时间,提交的版本号)
git reflog # 查看版本提交的日志

git reset --hard 74c071f922 #工作区的内容回退到 74c071f922 版本


# 空文件夹,不会被git管理,python中包会:包有 __init__.py

git过滤文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
在仓库目录下新建.gitignore  文件,在文件中写入要忽略的文件,文件夹,模糊匹配
## 注意:
'''
文件或文件夹名:代表所有目录下的同名文件或文件夹都被过滤
/文件或文件夹名:代表仓库根目录下的文件或文件夹被过滤

eg:
a.txt:项目中所有a.txt文件和文件夹都会被过滤
/a.txt:项目中只有根目录下a.txt文件和文件夹会被过滤
/b/a.txt:项目中只有根目录下的b文件夹下的a.txt文件和文件夹会被过滤
*x*:名字中有一个x的都会被过滤(*代表0~n个任意字符)
空文件夹不会被提交,空包会被提交,包可以被提交(包中有一个init空文件)

eg:
.idea
scripts
*.pyc
__pycache__
'''


pycharm软件
-绿色:在暂存区,没有提交到版本库
-红色:在工作区新增,没有提交到暂存区
-蓝色:在工作区修改的,没有提交到暂存区
-黄色:忽略的
-白色:已经被git管理的

git分支操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#创建分支
git branch 分支名
git checkout -b 分支名 #创建并切换到新分支
#切换分支
git checkout dev
#查看分支
git branch

#删除分支
git branch -d 分支名

#合并分支
git merge 分支名 #把dev分支合并到master分支:切换到master分支,执行合并dev分支的命令

# 分支合并可能会出冲突

git远程仓库

  • GitHub
  • gitee
  • gitlab
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1 在远程仓库中新建空仓库

2 git init # 初始化,让项目被git管理
git add . # 将所有项目提交到暂存区
git commit -m '注释' # 将暂存区的项目提交到本地版本库
git remote add 名字 远程仓库地址 # 增加一个远程仓库(指定目标远程仓库)
git push 远程仓库名字 分支名字 # 把本地版本库内容,提交到远程仓库(需要输入账户密码/用ssh连接)

3 远程仓库操作
增加
git remote add 名字 远程仓库地址
查看
git remote
删除
git remote remove origin
提交到远程仓库
git push origin master

采用ssh协议连接远程仓库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1 https方式:用户名+密码认证方式

2 ssh方式:公钥私钥方式
本地生成公钥私钥
ssh-keygen -t rsa -C "1965617308@qq.com"
生成的公钥私钥在用户家路径的.ssh文件夹下
id_rsa # 私钥
id_rsa.pub # 公钥
'公钥'配置到远程仓库上
以后再提交代码就不用输入用户名密码

ps:重新配置远程仓库
git remote add origin git@gitee.com:chi-jintao/luffy_api.git
git push origin master # 选yes

项目创始者与项目开发者

  • 开发者
1
2
3
4
5
6
需要把代码clone到本地

1 git clone https://gitee.com/liuqingzheng/luffy_api.git
2 修改代码
3 提交到远程
4 git push origin master
  • 创始者
1
需要远程新建仓库,本地代码push上去

协同开发

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1 管理员、开发者(10开发者以上需要充值~)
能提交代码(增删改查)

2 有一个开发者提交了代码

3 另一个开发者,在提交之前,必须先拉取代码(让本地保持最新) (有事没事pull一下)

4 冲突解决(多人在同一个分支开发,导致冲突)

"""
<<<<<<< HEAD # 冲突的开始
# 自己的代码
======= # 分割线
# 别人的代码
>>>>>>> b63c408abd05b87fc492d40523240561999dba50 # 冲突的结束(版本)
"""

# 解决
1 该同样的功能出现的冲突,保留好代码,删掉其中一个即可

2 改不同功能出现冲突,两者都留

# 有事没事pull一下代码

线上分支合并

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1 本地和远端分支
本地建立分支,同步到远端
git branch dev
git push origin dev

远端建立分支,同步到本地
远端建立分支
git pull origin dev
git branch # 看不到
git checkout dev # 切到dev分支,本地就能看到了

2 提一个pr:pull request(分支合并的请求)

3 审核通过、测试通过后,合并分支/扁平化合并
git 变基(git rebase) ---> 扁平化合并(不保留分支的各个提交的小版本)(结果好看,但有冲突比较麻烦)
合并分支 合并分支(保留分支的各个提交的小版本)(结果乱,有冲突比较好解决)

4 远端:dev分支代码和master分支代码完全一致

本地分支合并推送到远程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1 由于dev分支和master分支合并时,有冲突,就不能自动合并了,我们需要本地合并完,解决冲突,再提交

2 把dev合并到master
git checkout master
git merge dev
有冲突,解决冲突
再提交

3 本地的分支提交到远端分支(如果名字不一样)
git push origin dev111:dev222 # 不要作死

ps:
1 git操作出没出冲突,如何解决
-第一:多人在同一分支开发
-第二:分支合并出冲突

2 git 变基
3 git fetch 和 git pull的区别
4 git add . 与git add xxx