Git简介
我们都知道Git是用来做版本控制的,那么到底什么是Git,如何使用Git。下文记录着我的学习过程。
我们先了解几个常用的概念:
-
版本控制(version control):在我们日常开发过程中,总是要对文件做出修改,每次修改后的文件,就相当于一个新版本,而把这一次次修改的文件记录下来,可以对新版本、旧版本进行操作,就是所谓的版本控制。
-
版本控制系统:用来记录一次次版本,并可以对其进行操作的系统。主要分成了三类:
- 本地版本控制系统:相当于对每个版本做一个快照,适合个人开发。
- 集中版本控制系统:将所有版本数据同一放在中央仓库中,用户同步更新。例如SVN
- 分布式版本控制系统:每个人的版本都存放在本地中,通过push,pull等操作上传/拉取到本地。Git就是分布式版本控制系统
既然Git是分布式版本控制系统,他存放数据的仓库就不仅仅只是一个中央服务器了,我们还要知道有关Git的几个概念
远程仓库:例如github、码云等都属于远程仓库,用来存放每个版本数据的数据的
本地仓库:每个开发者从远程仓库中拉取下来版本的数据,开发者对文件等进行了修改,用于存放开发者自己修改的数据。
暂存区:修改的数据还未提交到本地仓库,只是放在一个类似缓存的地方存放,这个地方就是暂存区
工作目录:当前开发者正在工作的目录
下面是我们了解一下git的工作流程,如图:
我们第一次进行开发时,先要将远程仓库的数据克隆(clone)到本地仓库,有时需要创建单独的分支进行开发,我们需要进行创建或切换(checkout)分支,但通常不用。在日常开发中,通常是先将远程仓库中的数据拉取(pull)下来,然后日常改bug,写业务,当完成一个模块的修改时,将修改的内容添加(add)到暂存区,再提交(commit)到本地仓库,一天的开发结束后,推送(push)到远程仓库。
下面就是干货了,记录了Git的使用和常用命令
Git 支持多种数据传输协议。下面介绍两种:
架设 Git 服务器时常用 SSH 协议作为传输协议。 因为大多数环境下服务器已经支持通过 SSH 访问 —— 即使没有也很容易架设。 SSH 协议也是一个验证授权的网络协议;并且,因为其普遍性,架设和使用都很容易。
1、生成ssh公钥(一路回车即可)
ssh-keygen -t rsa -C "1149116@qq.com"
2、进入.ssh文件中
一般位于c盘下user中,是一个隐藏文件
3、在gitee或github上添加公钥
将.ssh文件中的 id_rsa.pub
文件中的内容复制到公钥中
4、验证是否链接成功
ssh -T gitee.com
Hi "你的名字"! You've successfully authenticated, but GITEE.COM does not provide shell access.
HTTPS 协议又是智能 HTTP,他的运行方式和 SSH 及 Git 协议类似,只是运行在标准的 HTTP/S 端口上并且可以使用各种 HTTP 验证机制, 这意味着使用起来会比 SSH 协议简单的多,比如可以使用 HTTP 协议的用户名/密码授权,免去设置 SSH 公钥。
获取Git仓库
在执行git之前,我们首先要设置用户名和邮箱,否则会报错Please tell me who you are.
git config --global user.name YourName
git config --global user.email YourEmail
- 将尚未进行版本控制的本地目录转换为 Git 仓库
git init //初始化仓库,会创建一个.git文件
//---------下面的命令后面会解释------------
git add .
git add LICENSE
git commit -m 'initial project version'
- 从其它服务器克隆一个已存在的 Git 仓库
git clone https://gitee.com/xxxx/dxxxxe.git
/*--修改了文件--*/
git add .
git commit -m "ces"
git push origin master //可能需要输入密码
配置Git的忽略文件.gitignore
/node_modules 提交时忽略node_modules目录
本地Git的常用指令
1、查看
git config -l
git status
git diff //对比工作目录中当前文件和暂存区域文件之间的差异。修改之后还没有暂存起来的变化内容。
git diff --staged //比对已暂存文件与最后一次提交的文件差异:
git diff --cached //暂存区和上一个版本的差异
git diff head //本地和上一个把版本的差异
git log //会按时间先后顺序列出所有的提交,最近的更新排在最上面,q键退出
git reflog
2、添加
- 将修改内容添加到暂存区
git add index.css index.html //将index.css,index.html添加到暂存区
git add . //将所有文件加入缓存区,不包括忽略文件
- 提交到本地仓库
git commit -m "添加的注释"
3、删除
git remove README.md //移除README.md文件。并连带从工作目录中删除指定的文件
git rm --cached README.md //仅仅从暂存区中移除README.md文件,而不从工作目录也删除掉
git commit --amend //重新提交,回直接替换掉原来的提交
git checkout -- index.html
//请务必记得 git checkout -- <file> 是一个危险的命令。 你对那个文件在本地的任何修改都会消失——Git 会用最近提交的版本覆盖掉它。 除非你确实清楚不想要对那个文件的本地修改了,否则请不要使用这个命令。
git reset HEAD CONTRIBUTING.md
git reset --hard HEAD^ //一个尖角号回退一个版本
git reset --hard HEAD~2 //回退两个版本
git reset --hard number //回退到指定版本,number是指定id,reflog可以查看
远程仓库Git常用命令
1、查看
git remote -v //会显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL。(fetch拉取地址,push推送地址)
git remote show //查看所有
git remote show origin //查看origin的具体信息
2、添加远程仓库
git remote add <shortname> <url>
//现在你可以在命令行中使用字符串 origin1 来代替整个 URL。
git remote add origin1 https://gitee.com/xxxx/xxxx.git
git fetch <remote>
//这个命令会访问远程仓库,从中拉取所有你还没有的数据。 执行完成后,你将会拥有那个远程仓库中所有分支的引用,可以随时合并或查看。
git fetch origin1
3、拉取远程仓库
git pull origin master
4、推送到远程仓库git push <remote> <branch>
git push origin master//当你想要将 master 分支推送到 origin 服务器时
5、远程仓库的重命名与移除
git remote rename
git remote rename origin1 org //想要将 origin1 重命名为 org
git remote remove org //移除org
Git分支常用命令
1、创建分支
git branch dev //查看所有分支列表
2、切换分支
git checkout dev //切换分支到dev
创建一个分支并切换到创建分支上
git checkout -b dev //创建dev分支并切换到dev分支
/*------相当于---------*/
git branch dev
git checkout dev
3、查看每一个分支
git branch -v //查看每一个分支的最后一次提交
4、删除分支
git branch -d dev //删除dev分支
5、合并分支:将dev分支合并到master分支上
git checkout master//切换到master分支
git merge dev //合并dev分支
案例:
你突然接到一个电话说有个很严重的问题需要紧急修补。 按照如下方式来处理:
- 切换到你的线上分支。
- 为这个紧急任务新建一个分支,并在其中修复它。
- 在测试通过之后,切换回线上分支,然后合并这个修补分支,最后将改动推送到线上分支。
- 切换回你最初工作的分支上,继续工作。
实现
git checkout master //切换到主分支
git checkout -b solvePro //创建一个分支
git commit -a -m 'bug is solved' //修改bug后提交
git checkout master //再切换到主分支
git merge solvePro //将solvePro合并到主分支上
git branch -d solvePro //因为已经用不到该分支了,所以我们删除掉该分支