1 Git--01 总结
# 1 git介绍
Git是分布式版本控制系统,控制的对象是开发的项目代码
-对文件进行版本管理
-多人协同开发,合并代码
# 2 git,gitlab,gitee,github
-Git:是一种版本控制系统,是一个命令,是一种工具。
-GitHub:是一个基于Git实现的在线代码托管仓库,包含一个网站界面,向互联网开放,公有仓库免费,部分私有仓库收费,全球最大的开源代码托管平台
-Gitee:(码云) 是 OSCHINA 推出的代码托管平台,支持 Git 和 SVN,提供免费的私有仓库托管,面向互联网开发,分收费和付费,中国最大的开源代码托管平台
-bitbucket:远程仓库
-GitLab:是一个基于Git实现的在线代码仓库托管软件,可以通过GitLab自己搭建一个类似于GitHub一样的系统,用在企业内部网络搭建Git私服,用于企业团队内部协作开发
-自己搭建一个gitlab,https://www.cnblogs.com/liuqingzheng/p/15325288.html
# 3 git 工作流程
-见下图
-工作区,暂存区,版本库
-git init
-git status # 红色,绿色,没有变化
-git add . # 把工作区发生变化的提交到暂存区
-git commit -m '注释' # 把暂存区所有的数据提交到版本库
-git log
-git reflog
-git reset --hard 版本号 # 把工作区内容变成某个版本
# 不用记
-git checkout . # 恢复工作区的更改:慎用
-git reset HEAD # 把暂存区更改拉回到工作区:少用
-注意:
# git log 和git reflog的区别:
-git log 命令可以显示所有提交过的版本信息如果感觉太繁琐,可以加上参数 --pretty=oneline,只会显示版本号和提交时的备注信息
-git reflog 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)
# 4 git基本命令
-git init
-git status
-git log
-git reflog
-git add
-git commit -m ''
-git config --global user.name '用户名'
-git config --global user.email '用户邮箱'
# 5 过滤文件
-Git工作目录中,有些文件必须要有,但又不能提交它们,就可以设置忽略文件
-在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名放进去,Git就会自动忽略这些文件
-文件夹名/文件名
-* 任意字符
-? 一个字符
# 6 git分支
-查看:git branch
-新增:git barnch 分支名字
-切换:git checkout 分支名字
-删除:git branch -d 分支名字 # 需要切换到其他分支,才能删除
-合并:切换到master---> git merge dev
# 7 远程仓库
-github
-gitlab
-gitee(以它为例)
-远程建立空仓库(尽量建空)
-设置远程仓库
-git remote add origin 仓库地址(https/ssh)
-把本地推到远程
-git push origin master # 把master分支推送到远程仓库
-需要输入用户名密码,正常情况,只需要输入一次,以后就保存了
-删除本地设置的远程仓库
-git remote remove 远程仓库名字
-查看本地设置的远程仓库
-git remote
# 8 ssh连接远程(公司常用的)
-本机生成公钥私钥---》用户家路径的.ssh文件夹下
-公钥配置在你自己的远程仓库
-设置远程仓库地址:git remote add origin 仓库地址(ssh)
-git push origin master # 往上推代码
-git pull origin master # 往下拉代码
2 Git--02
1 协同开发
# 多人合作开发一个项目---》多人公用一个远程仓库
# 以路飞后台项目为例
-git init
-设置忽略文件
.idea
.DS_Store
/script
/logs/*.log
__pycache__
-git add .
-git commit -m '第一次提交,写完了首页功能'
-远程新建一个远程仓库(空)
-创建一个origin
-git remote add origin git@gitee.com:liuqingzheng/luffy_api.git
-把本地仓库代码推送到远程仓库
# -u表示缓存,以后只需要敲 git push 代指git push origin master
-git push -u origin master # 不需要记 -u
-已经配了ssh,不需要任何认证
---------------以上操作可能是你领导做好了-----------------
-我是项目的拥有者,把新来的人加成项目的协同开发者
-仓库成员设置-->添加成员(观察者、开发者)
-新成员(开发者)
-克隆代码
-git clone https://gitee.com/liuqingzheng/luffy_api.git # 与直接下载zip一样
-开发新功能
-s1.py
-git add .
-git commit -m '新增了s1.py'
-git push origin master # 1 用户名密码 2 对仓库有写权限
-推送到远程
# 在提交之前一定要先拉一下代码,保证本地版本库跟远程保持一致,是最新
-git pull origin master(以后只要提交代码,都要拉一下,没事就拉一下,保证出现冲突概率小)
-git push origin master
2 线上bug分支解决方案
# 主功能已上线,现在服务器运行版本是v1.1
# 开发着新功能---》dev分支开发
# 忽然发现有bug---》新建一个bug分支(基于master分支建立bug分支)
-改bug
-把变更提交到bug分支---》测试---》合并到master--》v1.1.1
# 新功能开发完了---》要合并到master分支---》v1.2
# dev分支和master分支合并,可能会有冲突,也可能没有
2.1 开发新功能+解决bug ,不出冲突的情况
# 可以远程建立分支,同步到本地
# 也可以本地建分支,同步到远程
git branch dev
git checkout dev # 本地建立dev分支,切换到了dev分支, 远程没有
git push origin dev # 把本地dev分支推到远程origin仓库
# 开发新功能
vi ss1.py
git add .
git commit -m 'dev开发了用户功能'
git push origin dev # 把本地dev的更改提交到远程dev
# 继续开发新功能
vi ss1.py # 加入了一行
git add .
git commit -m 'dev开发了订单功能'
git push origin dev # 把本地dev的更改提交到远程dev
# 测试发现线上系统有bug,你领导让你去修复bug
# 基于master分支建一个bug分支
git checkout master
git branch bug
git checkout bug # 切换到bug分支
# 修复bug
vi ss2.py # 写点代码
git add .
git commit -m 'bug分支修复了'
# 本地bug合并到本地master
git checkout master
git merge bug # 不会出冲突
git push origin master # 把本地master推送到远程master,最新v1.11版本发布
# 切回到dev继续开发
git checkout dev
# 又增加了代码
# 把dev合并到本地master
git checkout master
git merge dev # 不会冲突
git push origin master # 不会冲突,最新v1.2版本发布
2.2 开发新功能+解决bug ,出冲突的情况
# 把所有分支都删除
git branch dev
git checkout dev
vi common.py # 写入代码
git add .
git commit -m 'dev增加了common.py'
# 线上出bug
git checkout master
git branch bug
git checkout bug
vi common.py # 写入代码
git add .
git commit -m 'bug分支增加了common.py'
# 把bug更改合并到master上
git checkout master
git merge bug # 不会冲突
# 把dev分支合并到master(冲突)
git merge dev # 出冲突
# 解决冲突 (该删删,该留留)
git add .
git commit -m '解决冲突'
git push origin master
3 冲突解决
3.1 多人在同一分支协同开发导致冲突
# 提交到远程仓库时,发生冲突
# 1 多人在同一分支协同开发导致冲突
-张三在s1.py第二行增加了一句
-print('hello world')
-提交到远程仓库
-李四在本地,没有拉代码,在老版本上的s1.py第二行增加了一句
-print('hello world')
-从远程仓库拉取代码,就会出现冲突 (冲突显示在冲突的文件中)
<<<<<<< HEAD # 冲突开始,下面是自己的代码
print('aaasdasd')
======= # 你的代码结束,下面是别人的代码
print('666')
>>>>>>> 2e8da99c75814f197f7909d1cf7816adfc4ccd81 # 别人的代码结束,版本号
-如果冲突是同一个功能,跟同事商量,保留某一个人的
-如果冲突不是同一个功能,保留俩人代码
-git add .
-git commit -m '解决冲突'
-git pull origin master # 正常不会有冲突(存在冲突问题)
-git push origin master
3.2 分支合并导致冲突
# 合并分支时,发生冲突
# 操作就是2.2的操作
4 线上分支合并(pr)
# master分支和dev分支(本地和远端都有)
# 1.本地合并:把dev合并到master上,再提交master到远程仓库
# 2.线上合并:把dev合并到master上---》提交一个pull request (简称:pr)
# 例:
# 1.本地创建dev,提交到远程 ==》 本地和远程都有dev
git branch dev
git checkout dev
git push origin dev
# 2.在common.py中加入了代码,提交到远端的dev分支
# 3.在线上完成分支合并
-提交一个pull request (简称:pr)
点 "+ Pull Request"按钮
注意:源分支是dev (需要被合并的),目标分支是master !!!!
而线下合并分支,是切换到合并分支上,再合并 需要被合并的分支
切换到master---> git merge dev
# 4.领导要 测试,审查代码 (专业词叫做 代码review)
# 5.测试和审查都通过,要合并分支(合并,扁平化:变基)
注:我们就只需要提交一个pr即可---》4/5 后续领导做
5 远程仓库回滚
# 本地恢复到最初状态
git checkout master # 切换到master分支
git reset --hard 版本号
# 提交到远端(强制提交)
git push origin master -f # 一般不要用
6 使用pycharm操作git
只要是命令操作,都可以使用pycharm点点完成
6.1 pycharm 指定git解释器
6.2 克隆远程仓库代码
7 面试题 (非常高)
0 出现冲突了么?怎么解决的?
1 什么是变基?git rebase
让提交记录变得更加简洁
-1 多个记录整合成一个记录
-2 解决分支合并分叉问题
2 扁平化合并 (先变基,再合并)
-1.需要先在dev分支 git rebase
-2.再切换到master,git merge dev
3 git pull和git fetch有什么区别
-1.相同点首先在作用上他们的功能是大致相同的,都是起到了更新代码的作用。
-2.不同点git pull 类似于 git fetch + git merge
4 你知道git工作流(gitflow)吗?
-gitflow是一种分支方案
-知道,但是我们公司没用,我们使用的是master-dev-bug分支方案
3 Git--整体总结
1 GIt:版本管理软件,分布式,进行版本管理,协同开发,合并代码
2 gitee,github,gitlab,git
-gitee,github,gitlab :git远程仓库
3 win,macos,linxu
-win,macos官方下载软件,一路下一步
-linux:yum install git
4 工作流程
-工作区,暂存区,版本库,远程仓库
5 常用命令
-git init
-git status
-git log
-git reflog :回退,删除所有的版本都显示
-git add .
-git commit -m '注释'
-git push origin master
-git pull origin master
-git clone 地址
6 忽略文件
-.gitignore
7 分支管理
-主分支,dev分支,bug分支
-git branch
-git branch dev
-git checkout dev
-git branch -d dev
-git merge dev
8 远程仓库
-gitee,gitlab
-git remote add 远程仓库(https,ssh)
-https:用户名密码
-ssh:公钥私钥
-对称加密:加密和解密用同一个秘钥
-非对称加密:加密用公钥,解密用私钥
-生成公钥私钥:家路径 .ssh
-git push origin master
-git pull origin master
-没事多pull代码、一个功能提交一次 (基本每天都要提交代码)
9 协同开发
-大家都接入同一个远程仓库的项目
-把你加成开发者,给你一个远程仓库地址
-git clone 远程地址
-基于它开发,推送到远程
-本地项目骨架搭好,远端建立空仓库,
10 线上bug,分支解决方案
11 冲突解决
-多人在同一分支开发
-分支合并出现冲突
12 线上分支合并(pr)
-pull request
13 远程仓库回滚
14 pycharm操作git
之前所有的命令,都可以点击完成
15 面试题
-git rebase:
-变基:多次提交合成一次
-避免分支合并的分差
-gitflow:git 工作流,一种分支方案
-git pull 和git fetch的区别
-git pull = git fetch + git merge
16 为开源软件贡献代码
-在开源代码点fork---》你的仓库就会有这个代码
-写代码,改bug,加功能
-提交pull request