第一章 为什么要学Git?
- 必点天赋。
- 必然趋势。
第二章 Git的简介和安装
Git的简介
- Git是目前世界上最先进的分布式版本控制系统。
版本管理系统能干什么?
- 协同开发。
- 冲突解决。
- 版本记录。
- 历史追查。
- 代码备份。
- 版本还原。
- 权限管理。
- 分支管理。
- 代码审查。
集中管理型版本管理
- 经典的集中管理型:CVS、VSS、SVN。
- 特点:
- ①实现了大部分开发中对版本管理的需求。
- ②结构简单,上手容易。
- 集中管理型版本管理的问题:
- ①版本管理的服务器一旦崩溃,硬盘损坏,代码如何恢复?
- ②程序员上传到服务器的代码要求是完整版本,但是程序员开发过程中想做小版本的管理,以便追溯查询,怎么破?
- ③系统正在上线运行,时不时还要修改bug,要增加好几个功能需要好几个月,如何管理几个版本?
- ④如何管理一个分布在世界各地、互不认识的大型开发团队?
分布式版本管理
- 分布式版本管理的优点:
- ①容灾能力强。
- ②本地版本管理。
- ③异地协作。
- ④灵活分支。
常见的Git工具
命令行工具
- Git for windows
- 下载地址:https://gitforwindows.org/
IDEA插件
- IDEA工具自带
- 下载地址:http://www.jetbrains.com/idea/
GitHub
Git的图形化界面
- SourceTree,下载地址:https://www.sourcetreeapp.com/
- Fork,下载地址:https://git-fork.com/
Git for Windows的安装
第三章 Git实战操作
设置用户名和邮箱
准备工作
- 在G盘新建git-project目录。
初始化git版本仓库
- 命令:
git init
- 示例:
设置项目级别的用户名和密码
- 命令:
git config user.name "需要配置的用户名" git config user.email "需要配置的邮箱"
- 示例:
设置系统级别的用户名和密码
- 命令:
git config --global user.name "需要设置的用户名" git config --global user.email "需要设置的邮箱"
- 示例:
提交文件
查看文件状态
- 命令:
git status
- 示例:
将文件添加到暂存区
- 命令:
git add 文件名(或目录名)
- 示例:
提交文件到本地库
- 命令:
git commit -m "注释"
- 示例:
查看文件提交记录
- 命令:
# 查看历史记录
git log 文件名
# 简易查看历史记录
git log --pertty=online 文件名
- 示例:
回退历史
- 命令:
# 回退到上一次提交 git reset --hard HEAD^ # 回退到n次操作 git reset --hard HEAD~n
- 示例:
版本穿越
- 命令:
# 查看历史记录的版本号
git reflog 文件名(目录名)
# 版本穿越
git reset --hard 版本号
- 示例:
还原文件
- 命令:
# 没有将修改的文件提交到暂存区,如果将修改的文件提交到了暂存区请先回退到上个版本
git checkout -- 文件名
- 示例:
删除文件
- 命令:
#先删除文件再git add,git commit提交
- 示例:
工作区+暂存区+本地库
- 工作区:电脑本地硬盘目录。
- 暂存区:一般存放在.git目录下的index文件中。
- 本地库:工作区中有个隐藏目录.git,它就是Git的本地版本库。
分支
分支的引入
- 系统上线了,但是产品经理又提出了新的需求,评估一下工期需要两个月,但是同时系统正在上线运行,时不时还需要修改bug,如何管理几个版本?
查看当前分支
- 命令:
git branch -v
- 示例:
创建分支
- 命令:
git branch 分支名
- 示例:
切换分支
- 命令:
git checkout 分支名
- 示例:
合并分支
- 示例:
#先切回需要合并的分支
git checkout 分支名
#合并分支
git merge 另一个分支名
## 比如需要将dev分支的文件合并到master分支上,那么命令如下
## git checkout master
## git merge dev
- 示例:
冲突
冲突的原因
- 冲突一般指同一个文件同一位置的代码,在两种版本合并时版本管理软件无法判断到底应该保留哪个版本,因此会提示该文件发生冲突,需要程序员手工判断解决冲突。
合并时冲突
- 程序合并时发生冲突系统会提示CONFLICT关键字,命令行后缀会进入MERGING状态,表示此时是解决冲突的状态。
- 示例:
解决冲突
- 此时通过git diff可以找到发生冲突的文件及冲突的内容。
- 示例:
- 修改冲突文件内容,再次git add 文件和git commit -m “提交注释”提交文件,后缀MERGING消失,表明冲突解决完成。
- 示例:
第四章 GitHub简介、和Git的协同办公
GitHub是什么?
- GitHub是一个Git项目托管网站,主要提供基于Git的版本托管服务。
GitHub的网址
注册账号的注意事项
- 不要使用163的邮箱,有可能收不到验证邮件。
- 较长时间不使用有可能被GitHub冻结账号。请登录其客服页面https://github.com/contact,填写账号恢复申请。
GitHub的使用流程
团队协作
图解
创建本地库、配置用户名和邮箱以及提交文件
- 命令:
# 创建本地库 git init # 配置用户名和邮箱 git config user.name "用户名" git config user.email "邮箱" # 新建文件bixiejianfa.txt # 将文件加入到暂存区 git add bixiejianfa.txt # 提交文件 git commit -m "辟邪剑法"
- 示例:
登录GitHub,创建项目,增加远程地址
- 命令:
# 远程代码一般为origin
# 远程地址就是GitHub上的项目的地址url
git remote add 远程代号 远程地址
- 示例:在GitHub上创建项目
- 示例:增加远程地址
推送到远程库
- 命令:
# 远程代号是指远程链接的代号。
# 分支名是指要提交的分支名称,比如master
git push 远程代号 本地分支名
- 示例:
邀请协作者
- 示例:
clone项目
- 命令:
git clone 远程地址 新项目目录名(可以省略,如果省略,默认是项目名)
- 示例:
修改完之后,推送项目
- 命令:
# 配置user.name 和user.email git config user.name "用户名" git config user.email "邮箱" # 修改文件 git add 修改的文件名 # 提交文件 git commit -m "注释" # 远程代码 git clone之后,远程代码默认为origin git push 远程代码 本地分支
- 示例:
拉取项目
- 命令:
# 远程代号指的是远程链接的代号
# 远程分支名值得是远程的分支名称
git pull 远程代号 远程分支名
- 示例:
团队外协作
- 略。
第五章 在IDEA中操作Git
- 略。
第六章 Git工作流
Git开发流程
- 集中式工作流。
- GitFlow工作流。
集中式工作流
- 像SVN一样,集中式工作流以中央仓库作为项目所有修改的单点实体。所有修改都提交到Master这个分支上。
- 这种方式与SVN的主要区别就是开发人员有本地库。Git很多特性并没有用到。
GitFlow工作流
- GitFlow工作流通过为功能开发、发布准备和维护设立了独立的分支,让发布迭代过程更流畅。严格的分支模型也为大型项目提供了一些非常必要的结构。
- 示例:
- 示例:
分支的种类
- 主干分支 master:主要负责管理正在运行的生产环境代码。永远保持和正在运行的生产环境完全一致。
- 开发分支 dev:主要负责管理正在开发过程中的代码。一般情况下应该是最新的代码。
- 热修复分支 hot fix:主要负责管理生产环境下出现的紧急修复的代码。从主干分支分出,修理完毕并测试上线后,合并到主干分支。合并完之后,视情况可以删除该分支。
- 发布版本分支 release:较大版本上线前,会从开发分支中分出发布版本分支,进行最后阶段的集成测试。该版本上线后,会合并到主干分支。生产环境运行一段阶段稳定后可以视情况删除。
- 功能分支 feature:为了不污染开发分支,会从开发分支独立出功能分支。开发完成后会合并到开发分支。