type
status
date
slug
summary
tags
category
icon
password
因为个人开发过渡到团队协作的需要,版本控制应运而生,常见的版本控制工具有集中式和分布式两种,集中式类似于纯线上操作的网游,代表产品有cvs、svn和vss中,分布式版本工具类似于既可以线上又能线下的游戏,代表产品有git、Mercurial、Bazaar、Darcs,其中git的使用者最多
Git简史

Git工作机制

代码托管中心负责维护远程库,可以简单理解为能将自己本地维护的代码上传到远程库中并通过代码托管中心来维护。局域网代码托管中心代表产品有Gitlab,外网代码托管产品有GitHub和码云
Git常用命令
命令名称 | 作用 |
git init | 初始化本地库 |
git config --global user.name 用户名 | 设置用户签名 |
git config --global user.email 邮箱 | 设置用户签名 |
git status | 查看本地库状态 |
git add 文件名 | 添加到暂存区 |
git commit -m "日志信息" 文件名 | 提交到本地库 |
git reflog | 查看历史记录 |
git reset --hard 版本号 | 版本穿梭 |
- 初始化本地库 git init

- 设置用户签名
基本语法(用户名和邮箱的引号可加可不加)
git config --global user.name 用户名
git config --global user.email 邮箱

此处慈铭的作用是区分不同操作这的身份, 用户的签名信息在没一个版本的提交信息都可以看到,据此来确认本次操作是谁做的,这里设置用户签名和将来登录github或者其他代码托管中心的账号没有任何关系。
- 查看本地库状态
git status
- 工作区没有任何文件
- 检测到为追踪的文件
- 检测到了有新建的文件添加到了暂存区
- 提交完成之后查看状态
- 检测到工作区有文件被修改(前提需要在后台改过文件)
- 工作区的修改添加到了暂存区
- 产生冲突(就后面将分支操作的时候演示)






多个分支同时编辑相同的地方
- 将工作区的修改添加到暂存区
git add 文件名

- 将暂存区的修改提交到本地库
git commit -m "日志信息" 文件名

- 查看历史版本
git reflog

- 版本穿梭
git reset --hard 版本号


版本穿梭的底层是移动head指针
分支操作
在版本控制的过程中,同时推进多个任务,以提高开发效率
各个分支在开发过程中,如果某一个分支开发失败,不会对其他的分支有任何的影响,失败的分支删除重新开始即可

分支命令
命令名称 | 作用 |
git branch 分支名 | 创建分支 |
git branch -v | 查看分支 |
git checkout 分支名 | 切换分支 |
git merge 分支名 | 把指定的分支合并到当前分支上 |
- 查看分支
git branch -v

- 创建分支
git branch 分支名
,创建的新分支是对master的拷贝,连hash都一样

- 在两个不同分之上分别做不同的修改操作

- 切换分支
git checkout 分支名
,发现hotfix 还是之前拷贝master分支的内容,没有同步master的修改


- 合并分支
git merge 分支名
- 分支合并后产生冲突

冲突产生的原因:
合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改。Git无法替我们决定使用哪一个。必须人为决定新代码内容。
如果一个分支的内容是在另一个分支创建时生成的,那么在只修改一个分支相同文件相同位置的内容情况下,合并时将不会产出冲突。
冲突的解决:
1)编辑有冲突的文件,删除特殊符号,决定要使用的内容
特殊符号:<<<<<<< HEAD=======>>>>>>> hot-fix

然后添加到暂存区,并执行提交,此处提交的时候不能带文件名。不然无法解决冲突
创建分支和切换分支的说明

master、hot-fix其实都是指向具体版本记录的指针。当前所在的分支,其实是由HEAD决定的。所以创建分支的本质就是多创建一个指针,HEAD如果指向master,那么我们现在就在master分支上,HEAD如果执行hotfix,那么我们现在就在hotfix分支上。所以切换分支的本质就是移动HEAD指针。
本地库和远程库交互控制
- 团队内协作

- 团队外协作

- 作者:tacjin
- 链接:http://jin.wiki/article/2775429e-714b-4bde-b0d9-837dff2ffff7
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。