Git
源码托管平台: github , gitee, gitlab, codepan(一般存储在github私有服务器上)
Git是目前世界最先进的分布式版本控制系统
作用 : 源代码管理
为什么进行源代码管理
方便多人协同开发[防止代码冲突,相互覆盖]
方便版本控制[利于以后的开发人员快速了解项目的开发过程,利于需求变更时进行代码回滚]
Git与Svn区别
SVN是集中式控制管理,也就是SVN有一个中央处理器,开发者需要在本地安装SVN客户端,才能都把代码提交到中央服务器
Git是分布式的版本控制工具,也就是说没有中央处理器,每个节点的地位平等,每个节点既是服务端也是客户端
SVN
Git
Git的windows下安装
官方网址:Git - Downloads
选择对应系统和位数进行下载,之后安装,一路next
Git工作区、暂存区和版本库
1.工作区介绍
开发电脑磁盘目录
2. 暂存区介绍
一般存放[.git] 目录下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引
3.版本库介绍
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。git中的head/master是分支,是版本库
git项目仓库的本地创建
cd 自己希望存储代码的目录路径(pro),并创建本地仓库.git
新创建的本地仓库.git是个空仓库
cd ~/Desktop cd pro git init . 如果没有声明目录,则自动把当前目录作为git仓库
在ubuntu下可以通过Ctrl + H快捷键,直观地显示隐藏目录,可以看到.git仓库目录的结构:
branches/ 分支管理目录
confiig 当前项目代码仓库的配置信息
description 当前项目描述
HEAD 当前项目仓库的当前版本信息
hooks/ 当前项目仓库的钩子目录[可以利用这个目录下面的文件实现自己拉取代码到服务器]
info 仓库相关信息
objects 仓库版本信息
refs 引用信息
配置git用户名和邮箱
针对当前目录所在的.git/config进行配置,只针对当前.git仓库
git config user.name 'py35'
git config user.email '12926...'
针对当前操作系统用户家目录下.gitconfig文件进行全局配置,将来在当前系统下所有git管理代码就会使用该身份
git config --global user.name 'py35'
git config --global user.email '12926...'
添加版本记录
git add . # .表示当前目录
git commit -m "版本历史介绍"
# add之后 要接commit
合并 git commit -a -m "版本历史介绍"
查看仓库状态
git status
git status -s # 简约模式
-
红色表示新建文件或者新修改的文件,都在工作区. git add 执行之前的效果
-
绿色表示文件在暂存区,git add 执行以后的效果
查看文件状态
(1)未追踪, 文件第一次出现在工作区, 版本库还没有存储该文件的状态(绿色)
(2)已追踪, 只要第一次,git add了文件, 文件就是已追踪
(3)未修改, 文件在工作区未被编辑
(4)已修改, 文件在工作区被修改(红色)
(5)未暂存, 文件已修改, 但是没有add到暂存区
(6)已暂存, 已经将修改的文件add到暂存区(绿色)
(7)未提交, 已暂存的文件, 没有commit提交. 处于暂存区(红色)
(8)已提交, 提交到版本库的文件修改,只有commit以后才会有仓库的版本号生成
添加文件到暂存区
git add . 把当前目录的所有文件添加到暂存区
git add 文件1 文件2 文件3 添加指定文件
提交到本地版本库
git commit -m "版本描述信息"
从暂存区中恢复文件/目录修改
git restore 文件 # 注意,只能回滚曾经被git跟踪过版本的文件,对于新增文件是没办法回滚的
查看历史版本[查看日志]
git log 或者 git reflog
分页展示日志
git log -p
退出按 [q] 键
CTRL + f 向上翻页
CTRL + b 向下翻页
显示指定日期之后的日志
git log --after '2020-01-02'
显示指定日期之前的日志
git log --before '2020-01-02'
指定显示指定开发者的日志
git log --author ‘lisi’
回退版本
方案一
HEAD 表示当前最新版本
HEAD^ 表示当前最新版本的前一个版本
HEAD^^ 表示当前最新版本的前两个版本
HEAD~1 表示当前最新版本的前一个版本
git reset --hard HEAD^
方案二 : 当版本非常多时,可选择的方案
通过每个版本的版本号回退到指定版本
git reset --hard 版本号 3a8f3bb
分支管理
git branch # 查看当前项目的所有分支
git branch <分支名称> # 在当前所在分支,新建一个分支,新分支的代码来自于当前分支
git checkout <分支名称> # 切换分支,如果分支不存在,则报错
git checkout -b <分支名称> # 新建分支并切换到该分支
git branch -d <分支名称> # 删除指定分支, 注意 : 必须先退出当前分支
git merge <分支名称> # 把指定分支下的代码合并到当前所在分支
合并代码过程中如果出现针对同一文件,出现不同版本的修改,就会出现冲突
一般原则就是:保留先提交的,后提交的代码让步,要保留则写在下方或者不保留则删除掉
gitee平台创建工程
采用https协议连接gitee码云仓库
解决版本冲突
多人开发,出现2个以上提交记录中对同一文件的同一行位置改动,则出现冲突
这种情况往往是开发者提交之前,没有拉取线上最新代码版本情况
修改冲突位置的代码即可
修改后效果
再次执行add、commit、push即可。开发中一定要先pull,然后在push
分支管理
所谓的分支,就是把代码复刻成多个不同的版本,在不同的版本下面进行代码的编写,当有需要的时候,可以衍生新的子版本或者把子版本和原有版本进行合并。
1. 列出当前项目的所有分支
master是git默认的主分支,是默认提供的
git branch
2. 创建并切换分支到dev
git branch dev # 创建代码分支dev
git chechout dev # 切换本地分支代码
简写 -> git checkout -b dev
同步分支到线上服务器 : git push -u origin dev:dev