git基础操作
本地仓库,工作区,暂存区,远程仓库
git add . 添加本地工作区内容到暂存区
git commit 将暂存区内容提交到本地仓库
git push origin master 将本地仓库推送到远程的master分支
git 查看历史记录的方式
git log
会显示每次提交的详细日志信息
git log --pretty=oneline
只显示精简的记录,每条日志一行
git log --oneline
精简记录格式,每个一行,哈希码也会缩短
git reflog
显示不同的日志序号
git 版本前进回退
常用命令
基于索引值操作[推荐]
git reset --hard [局部索引值]
使用^符号:只能后退
git reset --hard HEAD^
注:一个^表示后退一步,n 个表示后退 n 步
使用~符号:只能后退
git reset --hard HEAD~n
注:表示后退 n 步
版本回退也可以用于恢复删除的文件
reset 命令的三个参数对比
–soft 参数
仅仅在本地库移动 HEAD 指针
–mixed 参数
在本地库移动 HEAD 指针、重置暂存区
–hard 参数
在本地库移动 HEAD 指针、重置暂存区、重置工作区
恢复删除的文件
如果删除的文件已经提交了,可以通过版本回退进行找回如果
如果删除的文件没有提交,只是保存到了暂存区,那么可以用HEAD指针进行找回。
比较文件差异
git diff [文件名] 将工作区中的文件和暂存区进行比较
git diff [本地库中历史版本] [文件名] 将工作区中的文件和本地库历史记录比较
git diff 不带文件名会比较多个文件
分支合并和冲突解决
当在两个不同的分支分别修改了同一行文件并且进行了提交,当进行合并的时候,就会发生冲突,此时就会进入手动提交的阶段,需要手动选择留下哪些修改。
第一步:编辑文件,删除特殊符号
第二步:把文件修改到满意的程度,保存退出
第三步:git add [文件名]
第四步:git commit -m “日志信息”
注意:此时 commit 一定不能带具体文件名
历史版本保存机制
SVN是增量式的保存机制,每个版本只保存变化的部分。以文件变更列表的方式存储信息。这类系统将它们保存的信息看作是一组基本 文件和每个文件随时间逐步累积的差异。
Git 把数据看作是小型文件系统的一组快照。每次提交更新时 Git 都会对当前的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。所以 Git 的 工作方式可以称之为快照流。
Git具体保存格式
每次提交都有一个提交对象,包含了提交对象所在的tree,提交日志,作者签名等,tree对象包含多个blob块,parent指明父对象
提交对象和其父对象形成一个链条
在提交对象链表的基础上,创建分支和切换分支都只是生成新的指针和移动指针,因此速度很快。
gitflow工作流
主干分支 master
主要负责管理正在运行的生产环境代码。永远保持与正在运行的生产环境 完全一致。
开发分支 develop
主要负责管理正在开发过程中的代码。一般情况下应该是最新的代码。
bug 修理分支 hotfix
主要负责管理生产环境下出现的紧急修复的代码。 从主干分支分出,修 理完毕并测试上线后,并回主干分支。并回后,视情况可以删除该分支。
准生产分支(预发布分支) release
较大的版本上线前,会从开发分支中分出准生产分支,进行最后阶段的集 成测试。该版本上线后,会合并到主干分支。生产环境运行一段阶段较稳定后 可以视情况删除。
功能分支 feature
为了不影响较短周期的开发工作,一般把中长期开发模块,会从开发分支 中独立出来。 开发完成后会合并到开发分支。
gitlab
gitlab可以让我们自己安装一个版本控制的服务器,通常是作为一个局域网内的版本控制,具体操作和GitHub的操作类似。