Git和Github及分支

版本控制系统

文件进行更新迭代时通过手动修改会遇到操作麻烦、命名不规范、容易丢失、协作困难等问题

版本控制系统是一个用来记录文件变化,以便查看特定版本的系统

由手动管理文件改为软件管理

使用版本控制软件的好处:

操作简便:只需记住几组简单的终端命令即可快速上手常见的版本控制软件

易于对比:可以对比前后版本的变化细节,而查找出问题

易于回溯:可以选定文件需要回溯到之前的某一个状态

不易丢失:误删的文件可以轻松恢复

协作方便:基于版本控制软件提供的分支功能,可以轻松实现多人协作开发

版本控制系统的分类

本地版本控制系统:

特点:使用软件来记录文件的不同版本,提高了工作效率,降低了手动维护版本的出错率

缺点:单机运行,不支持多人协作开发

版本数据库故障后,所有历史更新记录会丢失

集中化版本控制系统:

特点:基于服务器、客户端的运行模式

服务器保存文件的所有更新记录

客户端只保留最新的文件版本

优点:联网运行,支持多人协作开发

缺点:不支持离线提交版本更新

中心服务器崩溃后,所有人无法正常工作

版本数据库故障后,所有历史更新记录会丢失

典型代表:SVN

分布式版本控制系统:

特点:基于服务器、客户端的运行模式

服务器保存文件的所有更新记录

客户端是服务器的完整备份,并不是只保留最新的文件版本

优点:联网运行,支持多人协作开发

客户端断网后支持离线本地提交版本更新

服务器故障或损坏后,可使用任何一个客户端的备份进行恢复

典型代表:Git

git基础

什么是Git

Git是一个开源的分布式版本控制系统,是目前世界上最先进、最流行的版本控制系统

特点:项目越大,开发者越多,越能体现出Git的高性能和高可用性

Git之所以快速和高效是因为它直接记录快照,而非差异对比,几乎所有操作都是本地执行

差异比较

传统的版本控制系统(例如SVN)是基于差异的版本控制,存储的是一组基本文件和每一个文件随时间逐步积累的差异

好处:节省磁盘空间

缺点:耗时、效率低(因为每次切换版本时,都要在基本文件的基础上,逐步应用每一个版本直到生成最新版本)

Git的记录快照

是在原有文件版本的基础上重新生成一份新的文件,类似于备份,如果没有修改就只保留一个链接指向之前的存储文件

例如:一个项目有abc三个文件,修改了啊文件,a文件就重新生成并被份,而bc两个文件就保留一个链接即可

缺点:占用磁盘空间较大

优点:版本切换时非常快

特点:空间换时间

几乎操作都是在本地进行,大多数操作只需要访问本地文件和资源

Git中的三个区域:工作区、暂存区、Git仓库

Git中的三种状态:已修改(modified)、已暂存(staged)、已提交(committed)

注:

工作区的文件被修改了,但还没有放到暂存区,就是已修改状态

如果文件已修改并放入暂存区,就属于已暂存状态

如果Git仓库中保存着特定版本的文件,就属于已提交状态

基本的Git工作流程如下:

1、在工作区中修改文件

2、将你想要下次提交的更改进行暂存

3、提交更新,找到暂存区的文件,将快照永久性存储到Git仓库

安装并配置Git

下载地址:Git - Downloads

配置用户信息

在桌面是单击鼠标右键,选择Git Bash Here

在弹出的界面中,输入以下代码去配置自己的用户信息

注:因为使用了--global(全局配置),那么该命令只需要运行一次就可以永久生效

通过以上代码配置的用户名和邮箱地址,会被写到c:/Users/用户名文件夹/.gitconfig文件中,用记事本打开即可查看到刚才输入的内容

使用命令快速查看Git的全局配置信息

查看所有的全局配置项

格式:git config --list --global

查看指定的全局配置项

格式:git config user.name / git config user.email

获取帮助信息

格式:git help<verb>

使用命令,就会弹出完整的git-<verb>消息的网页

使用 -h就可在终端获得更简明的“help”输出

格式:git <verb> -h

Git的基本操作

获取Git仓库的两种方式

1、将尚未进行版本控制的本地目录转换为Git仓库

2、从其它服务器克隆一个已存在的Git仓库

在现有的目录中初始化仓库

1、在项目目录中,通过鼠标右键打开“Git Bash”

2、执行git init命令将当前的目录转化为Git仓库

格式:git init

注:git init命令会创建一个名为.git的隐藏目录,这个.git目录就是当前项目的Git仓库,里面包含了初始的必要文件,这些文件是Git仓库的必要组成部分

工作区中的每一个文件可能有4种状态,这种状态分为两大类

未被Git管理:

未跟踪(untracked)--不被Git所管理的文件

已被Git管理:

未修改(unmodified)--工作区中文件的内容和Git仓库中文件的内容保持一致

已修改(modified)--工作区中文件的内容和Git仓库中文件的内容不一致

已暂存(staged)--工作区中被修改的文件已被放到暂存区,准备将修改后的文件保存到Git仓库

Git操作的终极结果就是让工作区中的文件都处于“未修改”的状态

查看文件处于什么状态

格式:git status

如果文件名出现在untracked files(未跟踪的文件)下面,则意味着Git在之前的快照(提交)中没有这些文件;Git不会自动将之纳入

如果文件名在changes to be committled下面,说明已被跟踪并处于暂存状态

以精简的方式显示文件的状态

格式:git status  --short(-s)

注:--short和-s是等价的可以进行平替

未跟踪的文件前面会有红色的??标记

新添加到暂存区的文件前面有绿色的A的标记

跟踪这个文件(即将文件添加到暂存区中)

格式:git add 文件名

这个命令有三个功效:

1、可以把它开始跟踪新文件

2、把已跟踪的、且已修改的文件放到暂存区

3、把有冲突的文件标记为已解决状态

提交暂存区文件

格式:git commit -m “ 提交内容的注释信息 ”

当有文件进入暂存区就可以使用git commit命令进行提交,其中-m选项后面是对本次的提交消息中的内容进行进一步的描述

跟踪文件被修改

当文件已经被Git跟踪,并且工作区和Git仓库中的文件内容保存一致,当我们修改了文件的内容再次运行git status命令,文件出现在changes not staged for commit下面,说明已跟踪的内容发生了变化,但还没有放入暂存区

使用-s查看,文件名前面会有一个红色的M标记

当我们将已跟踪、已修改的文件放到暂存区,使用git status -s查看该状态文件名前面会出现一个绿色的M标记

撤销对文件的修改

格式:git checked 文件名

指:把工作区中对应文件的修改,还原成Git仓库中所保存的版本

结果:所有的修改会丢失,且无法恢复

本质:用Git仓库中保存的文件,覆盖工作区中指定的文件

向暂存区中一次性添加多个文件

格式:git add .(这是一个英文点)

一次性将所有的新增和修改过的文件加入到暂存区

取消暂存的文件

从暂存区移除对应的文件

格式:git reset HEAD 文件名

从暂存区中移除所有的文件

格式: git reset HEAD .(这是一个英文点)

跳过暂存区

格式:git commit -a

提交时把所有已经跟踪过的文件暂存一并提交,跳过了git add步骤

从Git仓库中移除文件的方式:

从Git仓库和工作区中同时移除该文件

格式: git rm -f 文件名

删除后用git status -s查看状态,该文件名前面出现会绿色的D 标志

只从Git仓库中移除该文件,但保留工作区的该文件

格式: git rm --cached 文件名

删除后用 git status -s 查看状态,出现两个该文件名,一个前面有绿色的D标志,一个前面有红色的??标志,在次使用git commit -m“ ”提交后,使用git status -s查看状态,该文件名只有一个且前面有红色的??标志,说明该文件未被跟踪

忽略文件

当文件无需纳入Git管理,且不希望总出现在未跟踪文件列表时,我们可以创建一个名为 .gitignore的配置文件,列出忽略文件的匹配模式

文件.gitignore的格式规范:

1、以#开头的是注释

2、以/结尾的是目录

3、以/开头防止递归

4、以!开头表示取反

5、可以使用glob模式进行文件和文件夹的匹配

glob模式

glob指简化了的正则表达式:

1、星号* 匹配零个或多个任意字符

2、[abc]匹配任何一个列在方括号中的字符(匹配一个a或者匹配一个b或者匹配一个c)

3、问号?只匹配一个任意字符

4、短划线分隔两个字符表示在这两个字符范围内的都可以匹配(如[0-9]表示匹配所有0到9的数字)

5、两个星号**表示匹配任意中间目录(如a/星号星号/z可以匹配a/z、a/b/z、a/b/c/z等)

查看项目的提交历史

格式: git log

按时间先后顺序列出所有提交历史,最近的提交在最上面(倒序)

git log 使用 可以提前结束查看

只展示最新的两条提交历史,数字可以按需填写

格式:git log -2

在一行上展示最近两条提交历史的信息

格式: git log -2 --pretty=oneline

在一行上展示最近两条提交历史的信息,并自定义输出的格式

%h 提交的简写哈希值 %an作者名字 %ar作者修订日期,按多久以前的方式显示 %s提交说明

格式:git log -2 --pretty=format:“%h | %an | %ar | %s”

回退到指定的版本

先在一行上展示所有的提交历史,每一个提交历史前都有一个ID

格式: git log --pretty=oneline

根据指定的提交 ID 回退到指定版本

格式: git reset --hard ID

在旧版本中,查看命令操作的历史

格式: git reflog --pretty=oneline

再次根据最新的提交ID,跳转到最新版本

格式:git reset --hard<commitID>

 开源

开源许可协议(Open Source License)

为了限制使用者的使用范围和保护作者的权力,每个开源项目都应该遵守开源许可协议

常见的5种开源许可协议:

BSD(Berkeley Software Distribution)

Apache Licence 2.0

GPL(GNU General Public License)

具有传染性的一种开源协议,不允许修改后和衍生的的代码作为闭源的商业软件发布和销售

使用GPL的最著名的软件项目是:Linux

LGPL(GNU Lesser General Public License)

MIT(Massachusetts Institute of Technology,MIT)

是目前限制最少的协议,唯一的条件:在修改后的代码或者发行包中,必须包含原作者的许可信息

使用MIT的软件项目有:jQuery、node.js

开源项目托管平台

免费存放开源项目源代码的网站,叫做开源项目托管平台。

目前世界上比较出名的有:

Github(全球最牛)

Gitlab(对代码私有性支持较好,企业用户较多)

Gitee(又叫码云,是国产的开源项目托管平台。访问速度快、纯中文界面、使用友好)

注:以上3个只能托管以Git管理的项目源代码

Github

前提需先注册用户,创建空白的远程仓库

远程仓库的两种访问方式(都需先创建本地仓库):

HTTPS

零配置;但是每次访问仓库时,都需要重复输入Github的账号和密码

第二次提交,只需输入 git push即可同步远程和本地仓库

SSH

需要进行额外的配置;但是配置成功后,每次访问就不需要输入Github账号和密码

注:实际开发中推荐使用SSH

SSH key

作用:实现本地仓库和Github之间免登录的加密数据传输

好处:免登录身份认证、数据加密传输

由两部分组成:

1、id_rsa(私钥文件,存放于客户端的电脑中即可)

2、id_rsa.pub(公钥文件,需要配置到Github中)

生成SSH Key

1、打开Git Bash

2、输入ssh-keygen -t rsa -b 4096 -C "注册Github账号时填写的邮箱"

3、连续敲击3次回车,即可在c:\user\用户名文件.ssh目录中生成id_rsa和id_rsa.pub两个文件

配置SSH key

1、使用记事本打开id_rsa.pub文件,复制里面的文本内容

2、登录Github,点击头像--Settings--SSH and GPG Keys--New SSH key

3、将复制的内容粘贴到key对应的文本框中

4、在Title文本框中任意填写一个名称,来标识这个Key从何而来

检测SSH Key是否配置成功

输入ssh -T git@github.com 敲击回车 在弹出内容后输入yes后,如果出现hi 你的用户名即代表你成功

将远程仓库克隆到本地

格式: git clone 远程仓库地址

分支

master主分支

当初始化本地Git仓库时,会默认创建一个master的分支。通常将其称为主分支

作用就是用来保存和记录整个项目已完成的功能代码

功能分支

用来开发新功能的分支,是临时从master主分支上分叉出的,最终需合并到master

查看当前仓库中所有的分支列表

格式: git branch

注:分支名字前面有*号就代表当前处于该分支

基于当前分支,创建新分支(新分支中的代码和当前分支中的完全一致)

格式:git branch 分支名称

注:执行完创建新分支命令后,用户当前还是处于master分支

切换到指定分支

格式: git checkout 分支名称

快速创建和切换分支

-b表示创建一个新分支 checkout表示切换到新建的分支上

表示创建并切换到当前分支

格式:git checkout -b 分支名称

合并分支

先切换到master主分支

 将指定分支的代码合并到master主分支上

格式: git merge 分支名称

删除分支

格式:git branch -d 分支名称

注:删除某分支时,不能处于该分支上

遇到冲突时的分支合并

两个不同的分支对同一个文件进行不同的修改,Git无法干净的合并,只能手动解决冲突

在master上使用vscode打开文件,vscode中会有选项,选择不同选项进行操作,最后将所有文件提交 git add . 然后保存git commit -m “ ”

将本地分支推送到远程仓库

-u 表示把本地分支和远程分支进行关联,只在第一次推送的时候需要带 -u 参数

格式:git push -u 远程仓库的别名 本地分支名称:远程分支名称

例:git push -u origin payment :pay

如果希望远程分支的名称和本地分支名称一致,可以对命令简化

格式:git push -u origin payment

查看远程仓库中所有的分支列表

格式:git remote show 远程仓库名称

跟踪分支:从远程仓库中,把远程分支下载到本地仓库

从远程仓库中,把对应的远程分支下载到本地仓库,保持本地分支和远程分支名称相同

格式:git checkout 远程分支名称

从远程仓库中,把对应的远程分支下载到本地仓库,并把下载的本地分支进行重命名

格式:git checkout -b 本地分支名称 远程仓库名称/远程分支名称

拉取远程分支的最新代码

格式:git pull(位于那个分支,就只能更新当前分支的代码)

删除远程仓库中,指定名称的远程分支

格式:git push 远程仓库名称 --delete 远程分支名称

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值