这是我参与「第四届青训营 」笔记创作活动的的第1天
分布式版本控制系统Git
何为版本控制
- 版本控制是一种记录文件内容变化,以便将来查看特定版本修改情况的系统
- 版本控制其实最重要的是可以记录文件修改的历史记录,从而让用户能够查看历史版本
版本控制工具
-
集中式版本控制工具
- CVS、 SVN、 VSS
- 都有一个单一的集中管理的服务器、保存所有文件的修改版本,协同工作的人们可以通过客户端链接到服务器、取出最新的文件或者提交更新
- 好处:代码存放在单一的服务器上,便于项目的管理
- 缺点:如果服务器故障: 整个项目的历史记录都会丢失
-
分布式版本控制工具
- Git、Mercurial、Bazaar
- 客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份
- 优点:1.完全分布式;2.有能力管理大规模项目
-
Git安装
- windows : git-scm.com/download/wi…
- mac: git-scm.com/download/ma…
Git上手
-
Git工作机制
-
设置用户签名
git config --global user.name 用户名git config --global user.email 邮箱
-
初始化本地库
git init
- 通过该命令会在项目目录下新建一个.git的隐藏文件
-
查看本地库
git status
- On branch master: 当前本地库在master分支里面
- No commits yet: 当前还没有提交过东西(空git库)
- nothing to commit:没有东西可以提交
1. 新增一个文件(hello.txt)再查看本地库的状态
- Untracked files: 发现未被追踪的文件
- 此时hello.txx还处在工作区
2. 把本地文件添加到暂存区
git add hello.txt
- 从暂存区删除
git rm --cached hello.txt
- 但是文件还存在于工作区
- 把暂存区文件提交到本地库
git commit -m "日志信息" 文件名
- 上图c78e592为版本号
- nothing to commit, working tree clean(文件已经提交过,并且没有新增和修改,工作树是干净的)
- 查看引用日志信息
git reflog
- 查看详细日志命令
git log
-
修改文件
- 当修改过文件后再查看状态
- 会显示modified 表明文件被修改过
- 重复上面的步骤将修改过的文件添加到暂存区之后再次提交到本地库即可
-
历史版本
- 查看历史版本
git reflog (查看版本信息)git log (查看版本详细信息)
- 版本穿梭
git reset --hard 版本号
- 可以看到指针指向第一个版本
Git分支操作
| 命令名称 | 作用 |
|---|---|
git branch 分支名 | 创建分支 |
git branch -v | 查看分支 |
git checkout 分支名 | 切换分支 |
git merge 分支名 | 把指定分支合并到当前分支上 |
-
创建分支
git branch 分支名
- 创建一个名为hot-fix的热修复分支,再次查看分支
-
修改分支
vim hello.txt
- 按i键进行修改分支后,esc退出编辑模式,:wq保存退出
-
切换分支
git checkout 分支名
-
修改分支后再次提交本地库
-
再次切换回主线分支
- 回到了主线分支版本内容
-
合并分支
- 将hot-fix分支合并到master主线分支下
- 查看合并后的分支内容
- 冲突合并
- 产生冲突的原因
合并分支时,两个分支在同一文件的同一位置有两套完全不同的修改,Git无法替我们决定使用哪一个,需要人为决定新代码内容
- 修改主线分支内容
- 提交到本地库
- 查看修改后的主线分支内容
- 切换到hot-fix分支下修改其内容
- 查看修改后的分支内容
- 切换回主线分支进行代码合并
此处日志报错:合并代码冲突,显示自动合并失败
- 查看当前状态
- 手动修改代码
删除掉红框部分和和需要修改的地方
- 提交本地库
注意:提交本地库的时候不需要再写文件名