目录
git的使用
1 git简介
git是版本控制系统 - 它控制的对象是开发的项目代码
代码开发时间轴:需求1 => 版本库1 ==> 需求2 => 版本库2 => 版本库3(版本库1) => 版本库4(版本库2)
它的作用是完成 协同开发 项目,帮助程序员整合代码
1)帮助开发者合并开发的代码
2)如果出现冲突代码的合并,会提示后提交合并代码的开发者,让其解决冲突
SVN 、 GIT都是同一个人的个人项目
svn(集中式管理),git(分布式管理)
github、gitee(两个都是采用git版本控制器管理代码的公共平台)
gitlab(公司内部的代码仓库)
git的特点:集群化、多分支
git的三个区域:工作区,暂存区,版本库
2 git安装
1.下载对应版本:https://git-scm.com/download
2.安装git:在选取安装路径的下一步选取 Use a TrueType font in all console windows 选项
安装完成后右键就出现了 git bash here 选项
3 git的工作流程
4 git基本命令
-git init 文件夹名 # 初始化
-git init # 管理当前路径
-git status # 查看当前文件夹的状态(红色为修改,未进入暂存区,绿色为在暂存区)
-git log # 查看版本管理日志
-git reflog # 查看版本管理日志(两种方法的信息不相同)
-git add a.txt # 把a.txt提交到暂存区
-git add . # 把当前路径内所有文件提交到暂存区
git config --global user.email "lqz@qq.com" # 配置作者信息(全局C:\Users\wwh\.gitconfig)
git config --global user.name "lqz" # 配置作者信息(全局)
git config user.email "egon@qq.com" # 配置作者信息(局部:当前项目)
git config user.name "egon" # 配置作者信息(局部:当前项目)
-git commit -m '注释,我新增了a' # 把暂存区的所有文件提交到版本库
-git checkout . # 回滚到最后一次提交版本库的状态
-git reset --hard 版本号
# 版本号可以从git log查看: commit 408c30e612f5f77bdfcccf70e3426faf6c01ec98
# 或git reflog查看: 408c30e HEAD@{11}: commit: 增加了登录,注册
# 408c30e612f5f77bdfcccf70e3426faf6c01ec98即为版本号,可以只输入部分
# 忽略文件
# 用于指定某些文件或者文件夹不被git管理
# 用法:
# 1.在项目根路径,跟.git文件夹一个路径,新建 .gitignore. 文件
# 2.在文件中写要忽略的文件/文件夹名字
/dist 表示根路径下的dist文件夹,不被管理
*.py 表示后缀名为py的文件,都被忽略(*表示任意)
*.log*
# 分支操作
# 查看分支 git branch 查看所有分支,分支显示为绿色就表示:当前在该分支上
# 创建分支 git branch 分支名
# 创建并切换到 git checkout -b 分支名
# 删除分支 git branch -d 分支名
# 切换分支 git checkout 分支名
# 合并分支 git merge 分支名
# 把dev分支合并到master分支:
1.切换到master分支
2.执行合并dev分支的命令 git merge dev
注意点:
空文件夹不会被管理
5 git远程连接
git可以进行远程连接,将代码上传到远程服务器,进行协同开发
5.1 git项目创始者和开发者
git项目的创始者和开发者的操作不同
5.1.1 项目创始者操作
# 1 推荐使用码云(国内网站,网速快)
# 2 新建项目的码云仓库时,不要勾选Readme初始化这个仓库(会导致一些问题)
# 3 如果本地没仓库:在本地创建仓库
mkdir 文件夹名
cd 文件夹名
git init # 管理该文件夹
touch a.txt # 创建a.txt
git add a.txt # 提交到暂存区
git commit -m "first commit" # 提交到本地版本库
git remote add origin https://gitee.com/liuqingzheng/lqz_test.git
# 连接远程(可以使用https或ssh)
git push origin master # 将本地版本库的master分支上传到远程master分支
# 4 如果本地有仓库:使用该仓库
cd b # 进入该仓库
git remote add origin https://gitee.com/liuqingzheng/lqz_test.git # 连接远程
git push origin master # 将本地版本库的master分支上传到远程master分支
# 5 git 远程操作命令
-git remote # 查看远程仓库(没有就看不到)
-git remote add origin https://gitee.com/liuqingzheng/lqz_test.git # 跟远程仓库建立连接
-git push origin master # 把本地的master分支提交到远程的origin,需要输入用户名和密码
5.1.2 项目开发者操作
# 1 项目开发者,需要把代码拉下来继续开发
-git clone https://gitee.com/liuqingzheng/lqz_test.git # 连接远程仓库并将代码克隆到本地
-能看到完整的版本和日志控制
-可以回复到任意版本git rest --hard 版本号
-git checkout . # 表示回到指针指向的版本,而执行git rest --hard后指针移动到了该版本,所以这时执行checkout .不会改变
# 2 本地新增c.txt文件
-提交到暂存区 git add .
-提交到版本库(该版本库是本地,不是远程)
-提交到远程:git push origin master
# 3 将本地代码更新到远程版本库的版本
-git pull origin master
# 4 重点:每次再提交代码之前,一定要先更新代码(拉),如果不拉,无法上传代码
5.2 ssh连接和https连接
远程仓库可以使用https连接,也可以使用ssh连接
https需要用户名密码登录,并配置
ssh需要配置公钥
# 1 公司内部大部分用ssh连接
-领导发一个git地址(项目地址)
-通过执行git clone 地址,将代码下载到本地
-改代码,改完后直接提交会被禁止:因为无权限提交
-需要管理员进行ssh配置,在代码仓库内加入你的公钥
# 2 配置如何做
生成一对公钥和私钥(用命令)
-https://gitee.com/help/articles/4181(生成公钥攻略)
-ssh-keygen -t rsa -C "lqz@qq.com" 会将公钥私钥生成到 用户 家目录 的.ssh文件夹下
-复制公钥,在码云上配置
# 远程操作有三个命令
git pull
git push
git feacth(一般不用,与pull类似)
5.3 通过pycharm操作git
# 1 安装git
# 2 在pycharm中配置,setting--->git--->git.exe的地址
# 3 git clone --->等同于下图
# 4 使用pycharm创建本地分支(见下图)
# 5 拉取代码,如下图
# 6 push代码,如下图
5.4 协同开发
5.4.1 代码下拉出现冲突
# 1 协同开发可能出现冲突,例如执行git pull origin master,拉下远程代码,同事和你修改了同一个位置,就会产生冲突
# 2 冲突的提示效果,如下,这时就需要进行协商,进行处理
<<<<<<< HEAD
你的代码
=======
同事的代码
>>>>>>> origin/master
# 3 处理方案
-删除你的代码
-删除他的代码
-合并你们的代码
5.4.2 合并分支出现冲突
# 分支可以分为本地分支和远程分支,把本地分支提交到远程时就可能产生冲突
# 这时的处理方式与上面一样,进行协商处理
# 1 远端创建一个dev分支
-在远端直接创建
-本地创建,提交到远端
git checkout -b dev
git push origin dev
# 2 本地新建一个dev_bug分支
-dev_bug分支改了文件
-dev分支改了同样的文件
-合并就出冲突
-git merge dev_bug (在dev分支上操作)
-解决冲突(删你的,同事的,合并起来)
-git add . git commit
-正常了,冲突解决
# 3 手动线下合并代码并提交到远程
-git checkout master
-git merge dev
-如果出冲突,解决
-git add .
-git commit
-git push..
5.4.3 线上分支合并
# 如果提示可自动合并,表示合并后不会有冲突,正常操作即可
5.5 线上回滚
出现意外状况时,可以进行线上回滚
1 切换到master分支
2 回滚到某个版本 git reset --hard 版本号
3 强制提交代码 git push origin master -f # 强制提交
5.6 git的变基
git rebase
变基可以让合并后的版本的节点变得整洁,清晰
如果不变基,所有dev的节点都会合并到master中,导致master分支不清晰