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:美观,分支通过不同颜色线上,看着好看