GIT详细用法
1.初识GIT
GIT:分布式版本控制系统
作用:源代码管理
好处:方便多人协同开发,方便版本控制
起源:辅助linux内核开发
现状:已经被微软收购
2.GIT管理代码特点
服务器以及客户端都可以进行版本控制,都能进行代码提交,合并
GIT会在根目录创建.git文件夹,作为本地代码仓库
该仓库包含:本地一些操作,记录,日志,标签等
3.流程
可见流程总是这样:
Git服务器 --> 本地仓库 --> 客户端 --> 本地仓库 --> Git服务器
4.提交规则
写一点推一点,假如有人对同一文件进行提交操作后就会导致我们自己的文件和服务器不一致,需要进行冲突解决
5.工作区,暂存区,仓库区
三个区都在隐藏文件.git中
工作区:写代码。(git rm 文件 会删除文件,慎用)红色
暂存区:提交到仓库区时注意一定要将当前操作进行详细说明。(git reset HEAD/版本号:进行回退)绿色
仓库区:代码进入本地仓库无色
6.个人本地相关操作
①安装
sudo apt-get install git
②查看安装结果
git
③创建项目
在指定文件夹创建工作项目
④创建本地仓库
进入项目,创建本地仓库.git
cd 指定路径
git init
⑤配置个人信息(默认使用/home/.gitconfig) 代表谁进行提交
git config user.name fenghua
git config user.email [email protected]
在.git里边的config里边就有了配置信息
⑥查看git状态
git status
⑦工作区放暂存区
git add 文件名(带后缀)
⑧暂存区回退工作区
git rm
⑧暂存区放本地仓库区
git commit -m描述信息
⑨查看日志
git log
git reflog (包含的版本号更短,就7位,便于回退)可以查看删除记录
⑩回退(从仓库区回退)
方案一:
HEAD
表示当前最新版本
HEAD^&
表示当前最新版本的前一个版本
HEAD^^
表示当前最新版本的前两个版本,以此类推...
HEAD~1
表示当前最新版本的前一个版本
HEAD~10
表示当前最新版本的前10个版本,以此类推...
git reset --hard HEAD^
方案二(优):当版本非常多时可选择的方案
通过每个版本的版本号回退到指定版本
git reset --hard 版本号
11.撤销修改(相当于ctrl+z)
只能撤销工作区以及暂存区的
【1】在工作区定义变量,不add
git checkout 文件名
【2】在暂存区定义变量,先拉回到工作区,然后进行撤销
git reset HEAD 文件名
git checkout 文件名
12.对比版本
终端版本对比不是很直观,我们这里在pycharm中进行直观显示!!!
13.删除文件
rm 文件名
误删处理:
git checkout -- 文件名(从仓库进行恢复,仓库没了就真的没了,终止操作进行数据恢复)
7.创建远程仓库
加号-->new repository-->repository name-->Description-->public-->add .gitignore-->python-->MIT license/GNU-->create
此时有了项目,有了URL
模拟创建两个文件夹进行协同开发
然后在终端进行:
进入第一个文件夹(开发人员1)
git clone URL
进入第二个文件夹(开发人员2)
git clone URL
第一次push注意设置登录
设置记住密码(默认15分钟):
git config --global credential.helper cache
如果想自己设置时间,可以这样做(1小时后失效):
git config credential.helper 'cache --timeout=3600'
长期存储密码:
git config --global credential.helper store
开发人员1进行代码编写后提交代码:git add. -->git commit -m 描述-->git push
开发人员1进行个人信息的配置
git config user.name fenghua
git config user.email [email protected]
开发人员2进行代码拉取
git pull
下面模拟协同开发:
开发人员2也在该文件进行自己操作,开发人员1再次拉去代码git pull
8.冲突处理
多人同时操作一个文件时发生,无法推送,因为这个文件进行了修改。
解决:
方案1:双方保留
git pull
git add.
git commit -m 描述信息
git push
方案2:协商解决
改别人代码一定得协商(eg:命名重复函数),改自己随便改
注意:
冲突产生原因
多个人同时操作了同一个文件
一个人一直写不提交
修改之前不更新最新代码
提交之前不更新最新代码
擅自修改同事代码
PEP8格式化别人代码
减少冲突的操作方式
一定不要擅自修改同事的代码
下班前一定要提交代码,上班第一件事拉取最新代码(拉了就写,别啥都不做)
如果要修改公共文件,一定要先确认有没有人正在修改
各自开发各自的模块
一定要确保自己正在修改的文件是最新版本的
养成良好的操作习惯,先pull再
修改,修改完立即commit
和push
9.标签
阶段性汇总,当一个大版本完成后打一个标签(会在github的release里边进行版本打包),一般在master分支
模拟打标签:
1.进入本地仓库(拉下来的项目目录)
2.git tag -a 标签名 -m ‘标签描述’
3.git push origin 标签名
10.分支
主分支是项目真实跑的,从分支用于版本迭代,合并到主分支才生效。
分支作用:
1.区分生产环境以及开发环境
2.研究新的功能以及公关难题
3.解决线上bug
分支特点:
master,dev
master是默认分支,发布时将dev(自己起名)合并到master
查看当前分支:git branch
创建并切换到分支:git checkout -b 分支名
提交分支到远程:git push origin -u 分支名
然后进行代码编写:git add.-->git commit -m 描述-->git push(因为已经切换到从分支)
主分支没变
开发一段时间需要合并到主分支:
切换到主分支:
git checkout master
git merge 分支名
git push