目录
一、Git概述
1.1、git介绍
- 源代码管理
- Git是目前世界上最先进的分布式版本控制系统
- 分布式版本控制工具
Git是分布式版本控制系统(Distributed Version Control System,简称 DVCS
-
仓库
- 本地仓库:开发人员自己电脑的git仓库
- 远程仓库:远程服务器上的git仓库
- 团队内协作
- 跨团队协作
-
操作
- clone:克隆,将远程仓库复制到本地
- push:推送,将本地仓库代码上传到远程仓库
- pull:拉取,将远程仓库代码下载到本地仓库
- commit:提交,就是将本地工作区代码上传到本地仓库中
-
优点
- 容灾能力强
- 本地版本管理
- 异地协作
- 灵活分支
1.2、作用
git工作机制
二、安装与搭建
2.1、安装
下载地址:
https://git-scm.com/download
- 勾选git bash
- 选择git命令的执行环境
- 选择专业的git窗口
2.2、设置全局用户签名
Git是分布式版本控制系统,所以需要填写用户名和邮箱作为一个标识——即:用户签名。
说明:签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。
命令:
git config --global user.name "用户名"
git config --global user.email "用户邮箱"
- –global 表示全局属性,所有的git项目都会共用属性
- 查看配置信息:git config --list
- 在当前登录的系统用户路径下,生成~/.gitconfig隐含文件,里面可以看到刚刚设置的信息。如果不用命令设置,也可以直接打开文件进行设置。
三、相关概念
3.1、工作区、版本库、暂存区
- 工作区:就是你电脑本地硬盘目录,一般是项目当前目录
- 版本库:工作区有个隐藏目录.git,它就是Git的本地版本库
- 暂存区:一般存放在"git目录"下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)
- 分支:Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD
3.2、提交Git版本库
- “git add” 把文件纳入git管理,实际是把本地文件修改添加到暂存区
- “git commit” 提交更改,实际上是把暂存区的所有内容提交到当前分支
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以commit就是往master分支上提交更改。
可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。一旦提交完后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的。即:nothing to commit (working directory clean)。
四、Git本地库实战
4.1、常用命令
命令名称 | 作用 |
---|---|
git init | 初始化本地库 |
git config – global user.name | 设置用户名 |
git config --global user.email | 设置邮箱 |
git status | 查看本地库状态(master表示主分支,untracked表示未跟踪) |
git add 文件名 | 添加到暂存区 |
git commit -m ‘日志信息’ 文件名 | 提交到本地库 |
git reflog | 查看历史记录 |
git reset --hard 版本号 | 版本穿梭 |
说明:
- Git工作目录下的文件状态信息:
- Untracked 未跟踪(未被纳入版本控制)
- Tracked 已跟踪(被纳入版本控制)
- Unmodified 未修改状态
- Modified 已修改状态
- Staged 已暂存状态
- 这些文件的状态会随着我们执行Git的命令发生变化
- 红色表示新建文件或者新修改的文件,都在工作区.
- 绿色表示文件在暂存区
- 新建的文件在工作区,需要添加到暂存区并提交到仓库区
- 也可以使用git status –s 使输出信息更加简洁
- ?? : 表示未跟踪状态
新建文件
- 新建文件
- touch a.txt
- vim a.txt
- 查看文件状态
- git status
- On branch master :表示主分支
- Untracked files:表示未跟踪状态
- git status
- 添加到暂存区
- git add
- 只是增加到栈空间(index文件)中,还没有添加到本地库中。初始化时没有这个index文件。这还是一个新文件,需要将栈空间文件提交到本地仓库。
- git add .
- 添加项目中所有文件
- git add
- 撤销暂存区文件
- git reset <文件名称>
- 将暂存区提交到本地库
- git commit
- 执行命令时需要填写提交日志,进入编辑模式
- git commit -m “注释内容”
- 直接用-m参数指定日志内容,推荐
- git commit -am “注释内容”
- 添加和提交合并命令
- git commit
- 查看日志
- git log
- git log a.txt
- 查看文件日志,q退出
- git log -pretty=oneline
- 日志一行显示
- git reflog
- 查看历史操作
- 回退到历史版本
- git reset --hard HEAD^
- 一次回退一个版本,一个……代表一个版本数量
- git reset --hard HEAD~n
- 回退n次操作
- git reset --hard HEAD^
- 版本穿梭
- git reflog a.txt
- 查看历史操作
- git reset --hard 版本号
- 回到最新版本
- git reflog a.txt
- 撤销
- 未add,未commit
- git check --a.txt
- 撤销修改
- git check --a.txt
- 已add,为commit
- git add a.txt
- git reset
- 未add,未commit
- 删除
- rm java.jpg
4.2、初始化版本库
要使用Git对我们的代码进行版本控制,首先需要获得Git仓库,获取Git仓库通常有两种方式:
- 在本地初始化一个Git仓库
- 从远程仓库克隆
注意:git init后生产.git文件,当前的 .git 是一个隐藏文件夹,需要在电脑上面设置隐藏文件夹显示设置,否则,看不到这个.git目录。
4.3、分支
好处:同时并行推进多个功能开发,提高开发效率。
各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
分支操作:
git branch 分支名 创建分支
git branch -v 查看分支
git checkout 分支名 切换分支
git merge 分支名 把指定的分支合并到当前分支上
git branch -d 分支名 删除分支
五、工作流
简单的工作流
复杂的工作流
分支种类:
- 主干分支 master
- 主要负责管理正在运行的生产环境代码。永远保持与正在运行的生产环境完全一致。
- 开发分支 develop
- 主要负责管理正在开发过程中的代码。一般情况下应该是最新的代码。
- bug修理分支 hotfix
- 要负责管理生产环境下出现的紧急修复的代码。 从主干分支分出,修理完毕并测试上线后,并回主干分支。并回后,视情况可以删除该分支。
- 发布版本分支 release
- 较大的版本上线前,会从开发分支中分出发布版本分支,进行最后阶段的集成测试。该版本上线后,会合并到主干分支。生产环境运行一段阶段较稳定后可以视情况删除。
- 功能分支 ** **
- 为了不影响较短周期的开发工作,一般把中长期开发模块,会从开发分支中独立出来。 开发完成后会合并到开发分支。