Git基础

1. 版本控制工具应该具备的功能

  • 协同修改
    多人并行不悖的修改服务器端的同一个文件。
  • 数据备份
    不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态。
  • 版本管理
    在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约存储空 间,提高运行效率。这方面 SVN 采用的是增量式管理的方式,而 Git 采取了文 件系统快照的方式。
  • 权限控制
    对团队中参与开发的人员进行权限控制。
    对团队外开发者贡献的代码进行审核——Git 独有。
  • 历史记录
    查看修改人、修改时间、修改内容、日志信息。
    将本地文件恢复到某一个历史状态。
  • 分支管理
    允许开发团队在工作过程中多条生产线同时推进任务,进一步提高效率。

2. 版本控制简介

2.1版本控制

在 IT 开发过程中使用版本控制思想管理代码的版本迭代。

2.2版本控制工具

集中式版本控制工具: CVS、SVN、VSS……

分布式版本控制工具: Git、Mercurial、Bazaar、Darcs……

3.Git简介

Git简史

Git算法验证原理

哈希算法,Git底层采用SHA-1算法

Git官网

https://git-scm.com/

Git优点

大部分操作在本地,无需联网
分支操作流畅
与Linux全面兼容

Git安装过程(只记录注意的点,其它全是默认)



Git结构

Git和代码托管中心

托管中心任务——维护远程库
局域网——Gitlab服务器
外网——GitHub、码云Gitee

本地库和远程库

团队内部

第三方开发

4.Git常用命令

本地库初始化:

git init
注: .git文件是隐藏文件需要ls -lA查看。.git目录中存放的是本地库相关的子目录和文件,不要删除,也不要胡乱修改。

设置签名

形式:用户名:XXX Email地址:XXX
作用:区分不同开发人员的身份
辨析:这里设置的签名和登录远程库(代码托管中心)的账号、密码没有任何关系。

命令(两种):

1.项目级别/仓库级别:仅在当前本地库范围内有效
git config user.name XXX
git config user.email XXX
信息保存位置:./.git/config 文件
2.系统用户级别:登录当前操作系统的用户范围
git config --global user.name XXX
git config --global XXX
信息保存位置:~/.gitconfig 文件

级别优先级

1.就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别的签名
2.如果只有系统用户级别的签名,就以系统用户级别的签名为准
3.二者都没有不允许

状态查看:

git status

添加添加:

git add [filename]
将工作区的修改添加到暂存区

提交:

git commit -m “commit message” [filename]
将暂存区的内容提交到本地库
git commit -am “commit message” [filename] 可跳过上一步add

查看历史记录:

git log
空格向下翻页,b向上翻页,q退出

git log --pretty=oneline

git log --oneline

git reflog(常用)

–oneline :查看历史记录的简洁版本
–graph :查看历史中什么时候出现了分支、合并
–reverse :逆向显示所有日志
–author :查找指定用户的提交日志
–since、–before、 --until、–after: 指定帅选日期
–no-merges :选项以隐藏合并提交

前进后退

本质是指针HEAD的前进后退
基于索引值操作[推荐]
git reset --hard [局部索引值]
使用^符号:只能后退
git reset --hard HEAD^
注:一个^表示后退一步,n 个表示后退 n 步
使用~符号:只能后退
git reset --hard HEAD~n
注:表示后退 n 步

reset命令的三个参数对比

–soft 仅在本地库移动指针
–mixed 在本地库移动指针,并重置暂存区
–hard 在本地库移动指针,重置暂存区和工作区

取消缓存:

git reset HEAD [filename]

删除:

工作目录中删除:git rm
删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项:git rm -f
从暂存区删除,但在工作目录中保留git rm --cache [filename]
递归删除:git rm -r *

删除文件并找回

前提:删除前,文件存在时的状态提交到了本地库。
操作:git reset --hard [指针位置]
删除操作已经提交到本地库:指针位置指向历史记录
删除操作尚未提交到本地库:指针位置使用 HEAD

比较文件差异 (同一个文件[文件名]可不写)

尚未缓存的改动:git diff [文件名]
查看已缓存的改动: git diff --cached [文件名]
查看已缓存的与未缓存的所有改动:git diff HEAD [文件名]
显示摘要而非整个 diff:git diff --stat

移动或重命名:

git mv [file] [newfile]

5.Git分支管理

什么是分支?

版本控制中,使用多条线同时推进多个任务

优点:

提高开发效率;
一个分支失败其他分支不受影响,失败的分支重新开始即可。

常用命令

创建分支命令:

git branch (branchname)
注:执行git init 的时候,默认情况下会创建master分支。

删除分支命令:

git branch -d (branchname)

查看分支:

git branch -v

切换分支命令:

git checkout (branchname)
注:git checkout -b (branchname) 命令来创建新分支并立即切换到该分支

合并分支命令:

git merge
第一步:切换到接受修改的分支(被合并,增加新内容)上 git checkout [被合并分支名]
第二步:执行 merge 命令 git merge [有新内容分支名]

解决冲突步骤:

第一步:编辑文件,删除特殊符号
第二步:把文件修改到满意的程度,保存退出
第三步:git add [文件名]
第四步:git commit -m “日志信息”(注意:此时 commit 一定不能带具体文件名)

Git分支类型

master 分支
  • master 为产品主分支,该分支为只读唯一分支,也是用于部署生产环境的分支,需确保master分支的稳定性。
  • master 分支一般由release分支或hotfix分支合并,任何情况下都不应该直接修改master分支代码。
  • 产品的功能全部实现后,最终在master分支对外发布,另外所有在master分支的推送应该打标签(tag)做记录,方便追溯。
  • master 分支不可删除。
develop 分支
  • develop 为主开发分支,基于master分支创建,始终保持最新完成功能的代码以及bug修复后的代码。
  • develop 分支为只读唯一分支,只能从其他分支合并,不可以直接在该分支做功能开发或bug修复。
  • 一般开发新功能时,feature分支都是基于develop分支下创建的。
  • develop 分支包含所有要发布到下一个release的代码。
  • feature功能分支完成后, 开发人员需合并到develop分支(不推送远程),需先将develop分支合并到feature,解决完冲突后再合并到develop分支。
  • 当所有新功能开发完成后,开发人员并自测完成后,此时从develop拉取release分支,进行提测。
    release或hotfix 分支上线完成后, 开发人员需合并到develop分支并推送远程。
  • develop 分支不可删。
feature 分支
  • feature 分支通常为新功能或新特性开发分支,以develop分支为基础创建feature分支。
  • 分支命名: feature/ 开头的为新特性或新功能分支
  • 建议的命名规则: feature/user_createtime_feature,例如:feature/ftd_20201018_alipay,含义为:开发人员ftd在2020年10月18日时创建了一个支付宝支付的功能分支。
  • 新特性或新功能开发完成后,开发人员需合到develop分支。
  • feature 分支可同时存在多个,用于团队中多个功能同时开发。
  • feature 分支属于临时分支,功能完成后可选删除。
release 分支
  • release 分支为预上线分支,基于本次上线所有的feature分支合并到develop分支之后,从develop分支创建。
  • 分支命名: release/ 开头的为预上线分支
  • 建议的命名规则: release/version_publishtime,例如:release/v2.1.1_20201018,含义为:版本号v2.1.1计划于2020年10月18日时发布。
  • release 分支主要用于提交给测试人员进行功能测试。发布提测阶段,会以release分支代码为基准进行提测。测试过程中发现的bug在本分支进行修复,上线完成后需合并到develop/master分支并推送远程。
  • release 分支属于临时分支,产品上线后可选删除。
    ❝ 当有一组feature开发完成后,首先开发人员会各自将最新功能代码合并到develop分支。进入提测阶段时,开发组长在develop分支上创建release分支。 如果在测试过程中发现bug需要修复,则直接由开发者在release分支修复并提交。当测试完成后,开发组长将release分支合并到master和develop分支,此时master为最新可发布代码,用作产品发布上线。
hotfix 分支
  • hotfix 分支为线上bug修复分支或叫补丁分支,主要用于对线上的版本进行bug修复。
  • 分支命名: hotfix/ 开头的为修复分支,它的命名规则与 feature 分支类似
  • 建议的命名规则: hotfix/user_createtime_hotfix,例如:hotfix/ftd_20201018_alipaybugfix,含义为:开发人员ftd在2020年10月18日时创建了一个支付宝支付bug修复的分支。
  • hotfix 分支用于线上出现紧急问题时,需要及时修复,以master分支为基线,创建hotfix分支。当问题修复完成后,需要合并到master分支和develop分支并推送远程。
  • 所有hotfix分支的修改会进入到下一个release。
  • hotfix 分支属于临时分支,bug修复上线后可选删除。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值