Git 入门(附脑图)
目录
- Git概述
- 1.1 Git 简介
- 1.2 Git 工作流程
- 1.3 Git 下载和安装
- Git 代码托管服务
- 2.1 常用的Git代码托管服务
- 2.2 使用码云代码托管服务
- Git常用命令
- 3.1 环境配置
- 3.2 获取Git仓库
- 3.3 概念区分
- 3.4 Git工作目录下文件的两种状态
- 3.5 本地仓库的操作
- 3.6 远程仓库的使用
- 3.7 Git 分支
- 3.8 Git 标签
- 在vscode中使用Git
- 4.1 初始化版本库
- 4.2 版本提交
- 4.3 版本退回
- 4.4 管理修改
- 4.5 删除文件
- 使用TortoiseGit管理文件版本
- 5.1 TortoiseGit下载与安装
- 5.2 TortoiseGit使用
- 使用SSH协议传输数据
- 6.1 Git支持的协议
- 6.2 什么是SSH协议?
- 6.3 配置SSH协议
- 6.4 使用SSH协议
先来看一下本文的脑图:
1. Git概述
1.1 Git 简介
Git是分布式版本控制系统(Distributed Version Control System,简称 DVCS) ,分为两种类型的仓库:本地仓库和远程仓库
- 本地仓库:是在开发人员自己电脑上的Git仓库
- 远程仓库:是在远程服务器上的Git仓库
- Clone:克隆,就是将远程仓库复制到本地
- Push:推送,就是将本地仓库代码上传到远程仓库
- Pull:拉取,就是将远程仓库代码下载到本地仓库
1.2 Git 工作流程
Git的工作流程如下:
- 从远程仓库中克隆代码到本地仓库
- 从本地仓库中checkout代码,然后进行代码的修改
- 在提交前先将代码提交到缓存区
- 提交到本地仓库,本地仓库中保存修改的各个历史版本
- 修改完成后,需要和团队成员共享代码时,将代码push到远程仓库
1.3 Git 下载和安装
下载地址:https://git-scm.com/download
下载完成之后,按照步骤安装即可。
安装完成之后,在电脑桌面点击右键,如果能看到以下两个菜单就说明Git安装成功:
- Git GUI:Git提供的图形界面工具
- Git Bash:Git提供的命令行工具
2. Git 代码托管服务
2.1 常用的Git代码托管服务
gitHub( 地址:https://github.com/ )是一个面向开源及私有软件项目的托管平台,因为只支持Git 作为唯一的版本库格式进行托管,故名gitHub
码云(地址: https://gitee.com/ )是国内的一个代码托管平台,由于服务器在国内,所以相比于GitHub,码云速度会更快
2.2 使用码云代码托管服务
使用马云的相关服务,首先要创建一个账号,然后登陆创建的账号,之后开始创建Git仓库:
每个Git远程仓库都有一个网络地址,点击克隆/下载按钮即可查看:
我们还可以邀请其他用户成为仓库成员:
3. Git常用命令
3.1 环境配置
当安装Git后首先要做的事情是设置用户名称和email地址。每次Git提交都会使用该用户信息。
设置用户信息 :
git config --global user.name "name"
git config --global user.email "12345@qq.com"
查看配置信息
git config --list
git config user.name
git config user.email
通过上面的命令设置的信息会保存在本地用户文件夹的.gitconfig
文件中。
3.2 获取Git仓库
要使用Git对我们的代码进行版本控制,首先需要获得Git仓库。获取Git仓库通常有两种方式:
- 在本地初始化一个Git仓库
- 从远程仓库克隆
(1)在本地初始化一个Git仓库
执行步骤如下:
- 创建一个空目录
- 在该目录中,点击右键打开Git bash窗口
- 执行
git init
命令
注意:创建完成之后,就可以在目录中看到一个名为.git
的文件夹(此文件夹为隐藏文件夹)。
(2)从远程仓库克隆
可以通过Git提供的命令从远程仓库进行克隆,将远程仓库克隆到本地。
命令形式为:git clone 远程Git仓库地址
3.3 概念区分
- 版本库:前面看到的
.git
隐藏文件夹就是版本库,版本库中存储了很多配置信息、日志信息和文件版本信息等 - 工作目录(工作区):包含
.git
文件夹的目录就是工作目录,主要用于存放开发的代码 - 暂存区:
.git
文件夹中有很多文件,其中有一个index
文件就是暂存区,也可以叫做stage。暂存区是一个临时保存修改文件的地方
3.4 Git工作目录下文件的两种状态
Git工作目录下的文件存在两种状态:
- untracked 未跟踪(未被纳入版本控制,即该文件没有被Git版本管理)
- tracked 已跟踪(被纳入版本控制,即该文件已被Git版本管理)
其中已跟踪状态又可以细分为以下三种:
- Unmodified 未修改状态
- Modified 已修改状态
- Staged 已暂存状态
这些文件的状态会跟随我们执行的Git命令而发生变化。
3.5 本地仓库的操作
(1) git status
使用git status
查看文件状态,也可以使用git status –s
使输出信息更加简洁
(2)git add
我们可以看到下面的hello.txt
文件是未被跟踪状态,可以执行git add
命令将未跟踪的文件加入暂存区:git add hello.txt
,加入暂存区之后:
如果有很多需要加入缓存区的文件,可以执行命令:git add .
(3)git reset
可以使用git reset
命令将暂存区的文件取消暂存:git reset hello.txt
,取消之后:
(4)git commit
可以使用git commit
命令将暂存区的文件修改提交到本地仓库,其中-m是一个参数表示message 日志信息,参数后面要加一个日志信息,用双引号括起来。
(5)git rm
可以使用git rm
命令删除文件:git rm hello.txt
,删除之后的状态如下:
事实上,上面删除的只是工作区的文件,本地仓库的文件并没有删除,需要提交到本地仓库:git commit -m "delete hello.txt"
(6)git log
可以使用git log
命令来查看日志记录
还有两个命令:
// 显示每次提交的文件增删数量
git log --stat
// 显示每次提交删改的绝对数量
git log -p
注意:文件名后面 + 和 - 的数量是这个提交造成的更改中增删的相对比例
(7)将文件添加至忽略列表
有时候,有些文件无需纳入Git的管理,也不希望出现在未跟踪文件列中中,这些往往是自动生成的文件。比如日志文件,或者编译过程中创建的临时文件等。在这种情况下,我们可以在工作目录中创建一个文件: .gitignore ,列出要忽略的文件模式,来看一个示例:
// 所有以.a结尾的文件
*.a
// lib.a不能被忽略
!lib.a
// 文件名为TODO的文件被忽略
/TODO
// build目录下的文件被忽略
build/
// doc目录下的.txt文件被忽略
doc/*.txt // doc目录下多层目录的所有以.pdf结尾的文件被忽略 doc/**/*.pdf
3.6 远程仓库的使用
(1)查看远程仓库
如果想查看已经配置的远程仓库服务器,可以运行 git remote
命令。 它会列出指定的每一个远程服务器的简写。 如果已经克隆了远程仓库,那么至少应该能看到 origin
,这是 Git 克隆的仓库服务器的默认名字:
可以运行 git remote -v
命令来获取远程仓库的地址:fetch是抓取,push是推送
使用git remote show origin
命令可以查看更加详细的信息:
(2)添加远程仓库
运行 git remote add <shortname> <url>
添加一个新的远程 Git 仓库,同时指定一个可以引用的简写,其中:
- shortname:仓库名称(默认是origin)
- url:远程仓库地址
(3)从远程仓库克隆
使用 git clone
命令可以拷贝Git仓库中几乎所有的数据(包括日志信息,历史记录等)。当执行 git clone
命令时,默认配置下远程Git仓库中的每一个文件的每一个版本都将会被拉取下来:
(4)移除无效的远程仓库
使用 git remote rm
命令来移除远程仓库,但是该命令只是从本地移除远程仓库的记录(也就是接触本地仓库和远程仓库的关系),并不会真正影响到远程仓库。
命令:git remote rm origin
(5)从远程仓库抓取与拉取
在拉取之前,需要先添加远程仓库的地址:git remote add remote 远程仓库地址
git fetch
是从远程仓库获取最新版本到本地仓库,不会自动merge(合并数据):
这里可以不用填写origin master,抓取到本地之后需要执行git merge origin/master
来合并到工作区。(远端仓库remote默认仓库为origin,可以写origi,也可以写remote)
git pull
是从远程仓库获取最新版本并merge到本地仓库:
注意:如果当前本地仓库不是从远程仓库克隆,而是本地创建的仓库,并且仓库中存在文件,此时再从远程仓库拉取文件的时候会报错(fatal: refusing to merge unrelated histories ),解决此问题可以在git pull
命令后加入参数--allow-unrelated-histories
(6)推送到远程仓库
使用git push来推送本地代码到远程仓库,第一次推送需要输入远程仓库账号的账号密码
命令:git push remote master
3.7 Git 分支
版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。Git 的master分支并不是一个特殊分支。 它跟其它分支没有区别。 之所以几乎每一个仓库都有 master 分支,是因为git init
命令默认创建master分支。
(1)查看分支
当前处于的分支前面有一个*
,使用以下命令来查看分支:
- 列出所有本地分支:
git branch
- 列出所有远程分支:
git branch -r
- 列出所有本地分支和远程分支:
git branch -a
(2)创建分支
命令:git branch 分支名称
(3)切换分支
命令:git checkout 分支名称
(4)推送至远程仓库分支
要切换到需要推送的分支,在执行推送的命令。
命令:git push remote
(5)合并分支
命令:git merge 分支名称
如果我们想将A分支合并到B分支,就要先切换到B分支,然后执行命令:git merge A
注意:如果在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,Git 就没办法合并它们,同时会提示文件冲突。此时需要我们打开冲突的文件并修复冲突内容,最后执行git add命令来标识冲突已解决,在提交,执行以下命令:
git add 文件名称
git commit
注意:这些操作都是本地的操作,如果需要推动到远程仓库,还需要执行git push remote master
来推送到远程分支。
(6)删除分支
命令:git branch -d 分支名称
注意:如果要删除的分支中进行了一些开发动作,此时执行上面的删除命令并不会删除分支,如果坚持要删除此分支,可以将命令中的-d
参数改为-D
。
上面这些命令删除的都是本地的分支,如果想要删除远程仓库中的分支,可以使用命令:git push remote –d 分支名称
来删除。
3.8 Git 标签
Git可以给历史中的某一次提交打上标签,以示重要。比较有代表性的是人们会使用这个功能来标记发布节点。标签指的是某个分支某个特定时间点的状态,通过标签可以很方便的切换到标记时的状态。
注意:这里使用tName
来表示标签的名称。
(1)列出已用标签
- 列出所有的tag:
git tag
- 查看tag信息:
git show tName
(2)创建新标签
命令:git tag tName
(3)将标签推送至远程仓库
- 提交某一个标签:
git push remote tName
- 提交所有标签:
git push remote --tags
(4)检出标签
新建一个分支,指向某一个tag:git checkout -b branch tName
其中branch是新建的分支的名称。
(5)删除标签
- 删除本地标签:
git tag -d tName
- 删除远程标签:
git push remote :ref/tags/tName
4. 在vscode中使用Git
在vscode中有一个插件:GitLens,可以很方便的对源代码进行管理。
4.1 初始化版本库
- 使用快捷键:Ctrl+` 来打开vscode的终端。
- 使用cd命令可以打开文件:cd 文件名
- 初始化版本库:
git init
(通过git init将这个目录变成Git可以管理的仓库) - 或者是直接从远程仓库克隆项目:
git clone 远程仓库地址
4.2 版本提交
git add <file>
文件名或文件夹名称或者.代表所有:将文件添加到暂存区git commit -m "描述"
:将暂存区的文件提交到本地仓库git status
:查看提交修改的文件git branch
:查看当前分支git branch <分支名字>
:创建分支git checkout <分支名字>
:切换分支git merge <分支名字>
:(不是当前的分支)合并某分支到当前分支git branch -d <分支名字>
:删除分支git push origin master
上传本地指定分支到远程仓库git pull [branch]
: 取回远程仓库的变化,并与本地分支合并
4.3 版本退回
git reset --hard HEAD^
:回退到上一个版本(可以多次使用)
在回退过程中会做两件事:1.修改了HEAD指向(仓库当前版本回退到上个),2.将仓库上个版本的文件覆盖到暂存区域,用以丢弃上次的提交,(工作目录,文件夹中的文件还没变)git reset --hard HEAD^^
:回退到上两个版本git reset --hard
:将暂存区和工作区所有文件恢复成和HEAD一样git reset 文件名
:将暂存区指定文件恢复成和HEAD一样git log
:查看提交历史
hard后面跟的版本号没必要全部写出来,git会自动去补全匹配。
4.4 管理修改
git diff 文件名
:比较某文件工作区和暂存区的差异git diff --cached 文件名
:比较某文件暂存区和HEAD的差异git diff HEAD 文件名
:比较某文件工作区和HEAD的差异git diff
: 比较暂存区和工作区的所有差异git diff --cached
:比较暂存区和HEAD的所有差异git checkout 文件名
:将工作区指定文件恢复成和和暂存区一样
4.5 删除文件
git rm 文件名
:删除指定文件
5. 使用TortoiseGit管理文件版本
5.1 TortoiseGit下载与安装
TortoiseGit是一款开源的Git图界面工具,使用TortoiseGit可以简化Git的相关操作(本质上还是执行Git的相关命令)
TortoiseGit下载地址:https://tortoisegit.org/download/
下载完成之后,按照步骤进行安装,完成之后,在桌面单击右键,看到如下菜单,说明安装成功:
5.2 TortoiseGit使用
(1)创建仓库
选择第二项,打开之后直接点确定即可:
(2)克隆仓库
- 点击选择第一项:
- 输入需要克隆的地址,点击确定即可:
- 克隆完成:
(3)添加到暂存区、提交文件
- 右键单击需要添加到缓存区的文件,进行添加:
- 添加完成:
- 右键单击文件,选择提交:
- 在message区域添加日志信息,并点击提交:
(3)推送本地仓库到远程仓库
- 在目录中右键单击,选择push:
- 提交
- 如果本地仓库和远程仓库没有关联,就需要将仓库的地址复制下来,打开上方界面的message按钮,添加地址:
- 填写分支名称并提交:
(4)拉取代码 - 在文件中点击右键,选择pull:
- 确认拉取:
(5)创建分支
(6)切换分支
(7)合并分支
(8)推送指定分支到远程仓库
选择需要推送的分支,以及远程仓库的分支:
扯了这么多,感觉这玩意没啥用,不如命令行来的干脆~~~略略略
6. 使用SSH协议传输数据
6.1 Git支持的协议
由于Git远程仓库并不在我们本地,所以当我们使用远程仓库的时候就会涉及到数据的网络传输,Git支持多种网络传输协议:
- 本地协议(Local)
- HTTPS协议
- SSH(Secure Shell)协议
- Git协议
上面的操作,我们使用的都是HTTPS协议进行的。码云上支持的是HTTPS协议和SSH协议。下面就来学习一下SSH协议。
6.2 什么是SSH协议?
SSH是Secure Shell(安全外壳协议)的缩写,由IETF的网络小组所指定。SSH是目前较可靠,专门为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。
由于本地Git仓库和远程仓库之间的传输是通过SSH加密的,所以必须要让远程服务器认证你的SSH key,在此之前必须生成SSH key。
在使用SSH协议通信之前,推荐使用基于秘钥的验证方式,必须为自己创建一对秘钥(公钥和私钥),并把公钥放在需要访问的服务器上。
6.3 配置SSH协议
可以使用GIT提供的命令行工具Git Bash 来生成公钥和私钥,具体步骤如下:
- 使用命令
ssh-keygen -t rsa
生成公钥和私钥,执行完之后在windows本地用户.ssh目录:C:\Users\用户名\.ssh
生成如下的公钥和私钥:
其中上面是私钥,下面是公钥: - 复制公钥文件的内容至码云服务器:
在「个人设置」->「安全设置」->「SSH公钥」->「添加公钥」 ,添加生成的 public key 添加到当前账户中。
其中标题会自动识别。
6.4 使用SSH协议
配置完成之后,就可以复制仓库的SSH协议地址,在GIt中使用即可。
还没有评论,来说两句吧...