Git介绍
1 多人协同开发一个项目,版本管理工具:svn,git
2 git实现版本的控制
- 什么是git:版本控制器 - 控制的对象是开发的项目代码
代码开发时间轴:需求1 => 版本库1 ==> 需求2 => 版本库2 => 版本库3(版本库1) => 版本库4(版本库2)
3 git,gitee,github,gitlab
-gitee:中国的版github(很多公司在用)
-github:远程仓库,全球最大的开源代码库
-gitlab:公司自己搭建的远程仓库,公司的代码放在上面
4 git与svn比较
5 git的工作流程
-工作区:提交到暂存区:git add 指定文件名
-暂存区:提交到版本库:git commit -m 'dd'
-版本库:只有被版本库控制的代码,才能被监听,所以可以回滚到任何一个版本
6 git安装,去官网下载,一路无脑下一步
7 在任意路径下点右键,选择git bash here
>: mkdir test_git
>: cd test_git
>: git init #初始化仓库,在当前路径下创建一个.git隐藏文件夹
-当前路径就是工作区
-查看版本状态:git status
-红色:新建,修改,删除,在工作区没有放到暂存区
-绿色:提交到暂存区,没有提交到版本库
-没有东西:说明所有变更都被版本管理起来了(都提交到版本库)
>: git add . # 把当前路径下所有的变更都提交到暂存区
>: git commit -m '我的第一次提交' # 把暂存区的内容提交到版本库了
8 重点:
git init
git add .
git commit -m ‘注释’
git status
git与svn比较


git工作流程

版本库间的通信

git分支管理

Git基本操作
初始化git仓库
-初始化:git init #在当前路径下创建一个.git
-将已有的文件夹 - 初始化git仓库
>: cd 目标文件夹内部
>: git init
-在指定目录下 - 初始化git仓库
>: cd 目标目录
>: git init 仓库名
设置用户
-设置全局(在家路径新建一个.gitconfig文件,把用户名邮箱写进去)
>: git config --global user.name '用户名'
>: git config --global user.email '用户邮箱'
注:在全局文件 C:Users用户文件夹.gitconfig新建用户信息,在所有仓库下都可以使用
-设置局部(在项目路径的.git文件夹下的config文件中加入了用户名和邮箱)
>: git config user.name 'liuqingzheng'
>: git config user.email '222@qq.com'
注:在当前仓库下的config新建用户信息,只能在当前仓库下使用
注:一个仓库有局部用户,优先使用局部用户,没有配置再找全局用户
查看仓库状态
# 当仓库中有文件增加、删除、修改,都可以在仓库状态中查看
>: git status
-- 查看仓库状态
>: git status -s
-- 查看仓库状态的简约显示
git操作
-撤销工作区操作
>: git checkout .
-- 撤销所有暂存区的提交
本质是从版本库中拉取最新版覆盖工作区,如果没有被版本管理的文件,不会变化
>: git checkout 文件名
-- 撤销某一文件的暂存区提交
-撤销暂存区操作(很少使用,了解即可)
>: git reset HEAD .
-- 撤销所有暂存区的提交
>: git reset 文件名
-- 撤销某一文件的暂存区提交
>: git reset .
-- 撤销所有暂存区的提交
-撤销版本库提交
-回滚暂存区已经提交到版本库的操作:
查看历史版本(版本管理日志):
>: git log 显示作者,版本号,注释
>: git reflog 显示精简信息,显示的更多(版本切换也会显示)
查看时间点之前|之后的日志:
>: git log --after 2018-6-1
>: git log --before 2018-6-1
>: git reflog --after 2018-6-1
>: git reflog --before 2018-6-1
查看指定开发者日志
>: git log --author author_name
>: git reflog --author author_name
回滚到指定版本:
回滚到上一个版本:
>: git reset --hard HEAD^
>: git reset --hard HEAD~
回滚到上三个版本:
>: git reset --hard HEAD^^^
>: git reset --hard HEAD~3
回滚到指定版本号的版本:
>: git reset --hard 版本号 (重点)
>: eg: git reset --hard 35cb292
过滤文件
1 我们项目中有一些文件,文件夹,不要提交到版本库
2 在项目根路径新建:.gitignore.(win平台)
3 在文件中写忽略的文件/文件夹
-直接写文件夹名字或者/文件夹名字,表示忽略这个文件夹
-# 表示注释
-直接写文件名,表示忽略该文件
-* 表示通配符,表示任意数量任意字符 案例:*.log 以.log结尾的都忽略
-?表示单个字符 ?.log
4 咱们的项目(.gitignore.)
.idea
*.log
scripts
多分支开发
1 查看分支:git branch # 绿色的意思是当前所在分支
2 新建分支 git branch dev
3 切换分支 git checkout dev
4 删除分支 git branch -D dev # 应该切换到其他分支,再删除
5 分支合并 git merge 分支名
git checkout master # 切换到主分支
git merge dev # 把dev分支合并到主分支
远程仓库
gitee,github,gitlab
remote源操作(远程仓库)
-查看远程仓库:git remote
-添加远程仓库(远程仓库的名字origin):git remote add origin https://gitee.com/liuqingzheng/test.git
git项目创始者和开发者
采用ssh协议连接远程源
提交本地代码到远程仓库
git flow:git 工作流,人为设定的一个标准,多条分支,分别有不同的用途
1 remote源操作(远程仓库)
-查看远程仓库:
>: git remote
-添加远程仓库(远程仓库的名字origin):
>: git remote add 远程仓库名字 仓库地址
>: git remote add origin https://gitee.com/liuqingzheng/test.git
-删除远程仓库
>: git remote remove origin
2 远程创建仓库(建一个空仓库)

3 git项目创始者和开发者
项目创始者
1 没有项目纯空的
>: mkdir test
>: cd test
>: git init
>: touch README.md
>: git add README.md
>: git commit -m "first commit"
>: git remote add origin https://gitee.com/liuqingzheng/test.git
>: git push -u origin master
2 项目已经存在,在本地以及操作了(git_test)
>: cd git_test
>: git remote add origin https://gitee.com/liuqingzheng/test.git
>: git push origin master # 本地代码推送到远程
# 推送 远程仓库名 主分支
3 提交的时候需要输入gitee的用户名和密码
4 提交成功以后,在远程仓库能看到版本变更记录
项目开发者
# 因为是开源的所有人都可以克隆
>: git clone https://gitee.com/liuqingzheng/test.git
# 修改改代码
>: git add .
>: git commit -m
>: git remote 配置远程仓库(我现在不用配,同一台机器已经配置过了)
>: git push origin master
# 在提交代码之前,要先更新
>: git pull origin master
4 采用ssh协议连接远程源(公司一般用这种)
1 使用https操作的,第一次提交的时候,输入用户名密码
2 企业里通常使用ssh
-公钥:配置在gitee
-私钥:留在你本地
3 生成公钥私钥
-在命令窗口下,位置无所谓执行
ssh-keygen -t rsa -C "33@qq.com"
-会在/c/Users/oldboy/.ssh/id_rsa生成公钥私钥
-公钥给别人,私钥不能泄露(非对称加密:对称加密)
4 在gitee中配置,以后本机操作我这个账号,就不用密码验证了
5 远程仓库改成ssh方法
6 git push origin master



5 公司操作流程
1 到了公司,公司会给你一个gitlab账号和密码,(也可能是你自己注册)
2 登进去以后,就能看到你能开发的项目
3 git clone 项目地址
4 改代码---》一顿操作
4 提交到远程ssh方案(生成公钥私钥,配置到你账号中)
pycharm配置git







协同开发
1 多人开发同一个项目
2 现在你们git clone 项目,在你本地了
3 可以改代码了,当你git push 的时候,提交不了
4 项目管理员分配给你权限(gitee中管理--》仓库成员--》邀请成员)
5 这一个项目有一个管理员,若干开发者
6 重点:不能夸版本提交,只能先拉到最新,再提交
7 如果某个开发者再s1.py 的第14行加入了东西,我也加入了,他先提交(它没问题)
8 当我再拉取,出冲突了
<<<<<<< HEAD
你的代码
=======
同事的代码
>>>>>>> d78b8fb39f6469e810868218a052bc3174b3e1fc
9 解决冲突
-留你的代码:你写的好
-留他的代码:你觉得他写的好
-你们的都留着:你俩虽然改了一行,但是功能不一样
分支合并
1 版本库又两套
-本地一套
-本地有master,dev分支
-远程一套
-远程现在只有master分支
2 把本地dve提交到远端
git push origin dev
现在远端有两个分支 master和dev
3 删除本地分支,删除远程分支(点点点)
4 直接在远程创建分支(点点点)
5 把远端的dev拉到本地
1 线上分支合并
1 在线上新建一个dev1分支
2 拉去到本地
3 在本地dev1分支增加一行代码,提交到版本库
4 在本地dev1分支又增加一行代码,提交到版本库
5 远程分支合并
-pull request,指定从哪个分支合并到哪个分支
-绿色表示没有冲突,可以正常合并
-普通和扁平化(变基)
6 本地、远程的dev1和master就完全一样了


2 线下分支合并提交
1 本地dev1分支新增代码,提交到版本库
2 本地dev1分支合并到master
-切到master
-git merge dev1 (没有冲突直接合并)
-git push origin master (本地master提交到远端master)
3 切到dev1分支,再提交到远端
4 到此,本地分支合并完成,远端的dev1跟master完全一样,本地的dev1跟master也完全一样
3 合并分支冲突解决
1 再master加一行,提交到版本库
2 再dev1同样尾增增加一行,提交到版本库
3 把dev1合并到master,就会出冲突
-切到master分支
-git merge dev1 有冲突
-解决冲突(到底留什么,你觉得)
-提交到远端
远程仓库回滚
1 远程仓库,回到最初路飞第一次提交的地方
2 再本地回复到第一次提交
git reste --hard 59dbf80c
git push origin master -f # 强制提交
3 切记 -f 清醒的时候使用
其他了解
git flow
-是一种建分支的方案
-预览分支,开发分支,bug分支,主分支,测试分支...
pull和fetch区别
git pull:拉代码+合并
git fetch:拉代码,需要手动合进去
变基rebase
-合并分支的时候,是否保留之前分支的日志
git客户端:
-官方下载的一个(命令行下)
-pycharm编辑器
-sourcetree:美观,分支通过不同颜色线上,看着好看