git概述
Git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。Git易于学习,占地面积小,性能极快。它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。
Git远程库是基于网络服务器的远程代码仓库,在局域网里有Gitlab,互联网里国内有Gitee码云,国外有GitHub。
Git方便维护版本,可在各个版本间调整、并行,进行项目团队协作。
版本控制
这是一种记录文件内容变化、以便将来查阅特定版本修订情况的系统,使个人开发过渡到团队协作。
版本控制工具
集中式:CVS、SVN(Subversion)、VSS等
优点:管理员可控制开发者权限,管理集中化的版本控制系统
缺点:中央服务器单点故障时,无法更新,无法协同工作
分布式:Git、 Mercurial、 Bazaar、 Darcs等
优点:服务器断网时不影响开发,每个开发者的客户端保存着完整项目记录
安装(Mac)
- 官网下载对应版本
- 安装Xcode自带Git
安装后在终端输入git --version
查看版本
git --version
git version 2.30.1 (Apple Git-130)
配置用户和邮箱
Git首次安装必须设置
git config --global user.name “name” #姓名
git config --global user.email “xxx@mail.com” #邮箱
使用Git
初始化本地库
git init
指定一个目录,使用该目录打开终端,输入git init
,初始化后该目录为git工作区。该目录下生成一个隐藏目录/.git
,这个目录也叫版本库
cmd+shift+.
查看隐藏文件
查看本地库状态
git status
首次查看,无文件
新增文件后查看,检测到未追踪的文件
添加暂存区
git add 文件名
git add helloWorld.txt
再次查看状态,检测到暂存区有新文件
提交本地库
git commit -m "日志信息" 文件名
git commit -m "my first commit" helloWorld.txt
修改文件后再提交本地库
修改文件:vim 文件名
提交至暂存区:git add 文件名
提交本地库:git commit -m "日志信息" 文件名
查看历史版本
git reflog
查看版本信息 / 刷新日志
git log
查看版本详细信息
切换版本
git reset --hard 版本号
git reset --hard 9a4fbec
# head指针转向指定版本
HEAD is now at 9a4fbec my first commit
使用Git 分支
在开发时可以多人配合,同时推进多个任务,不仅可以提高开发效率,且在开发自己任务分支时不会影响主线分支的运行。
查看分支
git branch -v
‘*’ 指向当前分区
创建分支
git branch 分支名
切换分支
git checkout 分支名
合并分支
git merge 分支名
指针指向master时合并分支hot-fix,首次合并时出现提示,意为请输入提交消息以解释为什么需要进行此合并
按提示输入备注后,显示由“递归”策略进行的合并
合并后再次分别通过master/hot-fix修改文件,在不同行分别添加master test / hot-fix test ,添加提交本地库后再次合并,出现提示
说明产生合并冲突,两个分支在同一个文件的同一个位置有两套完全不同的修改,Git无法判断使用哪套,需要人为修改决定合并文件内容
特殊符号
<<<<<<< HEAD
当前分支的代码=======
合并过来的代码>>>>>>> hot-fix
为了解决冲突,即人工确认最终合并保留的代码,删除特殊符号,调整代码
修改后,执行提交,注意此时使用git commit
命令不能带文件名,可能报错(fatal:cannot do a partial commit during a merge),如执行成功
master、hot-fix 其实都是指向具体版本记录的指针。当前所在的分支,其实是由HEAD 决定的。所以创建分支的本质就是多创建一个指针。指针变化提示
注意:每一次修改都需要重新添加暂存区提交本地库
分支补充
在本地库下游隐藏文件夹/.git
,其中HEAD
文件指针指向当前分支,根据当前分支在/refs
文件夹下的/heads
文件夹查找对应分支文件,指针指向当前版本号
git团队协作机制
团队内协作
本地库-主创建远程仓库并推送代码,其他人克隆远程仓库到本地进行修改,上传远程库需要元上传者邀请
跨团队协作
将远程仓库地址发送给邀请跨团队协作的人,他通过代码托管中心收到链接,点击fork将项目叉到本地仓库,成功后可在线编辑叉取到的文件,编辑完毕提交并点击pull request。远程库-A收到pull request,调整确认后点击merge pull request合并代码