目录
- 一、从了解Git开始
-
- [1. 认识Git](#1. 认识Git)
- [2. Git下载](#2. Git下载)
- [3. 配置用户信息](#3. 配置用户信息)
- [4. 本地仓库](#4. 本地仓库)
- [5. 远程仓库](#5. 远程仓库)
- 二、本地仓库精讲
-
- [1. 工作流](#1. 工作流)
- [2. 命令](#2. 命令)
- 三、远程仓库精讲
-
- [1. 基础概念讲解](#1. 基础概念讲解)
- [2. 命令](#2. 命令)
- [3. 生产环境工作流](#3. 生产环境工作流)
一、从了解Git开始
1. 认识Git
Git是一个分布式版本控制系统。它使每一个开发者本地都有一个独立的版本库,可以在本地管理代码版本;还可以记录文件内容的变化,以便查阅和修改文件版本。
2. Git下载
在Git官网下载安装包,然后再本地安装。
3. 配置用户信息
安装结束后,第一件事就是配置用户信息,因为每一次提交都要用到用户信息。
git config --global user.name xxx
git config --global user.email xxx.com
4. 本地仓库
分为三个区域:
1.工作区:在这个区域对项目代码进行开发和修改。
2.暂存区:对工作区的文件跟踪后,就把修改加入了暂存区。
3.本地代码库:对暂存区的文件进行提交之后,就来到了本地仓库,作为一个被提交的代码版本被保存起来。
5. 远程仓库
在本地仓库的基础上引入两个概念
1.分支:
是一个指向commit对象的指针,常见的有master。head指针永远指向当前工作的本地分支。关于分支的操作有创建分支、切换分支、删除分支、合并分支。特别地,合并分支时,应该先解决冲突再合并。
- 远程分支:
也是一个指针,指向与远程仓库交互的commit对象,只有本地与远程仓库交互之后才会移动。也就是只记录最后一次与远程仓库交互过的版本。
远程分支告诉开发者从远程仓库clone代码时的代码库的情况。
在本地无法改变远程分支的位置,只有在与远程代码库服务器通信时才能改变。
可以通过
git fetch
获取远程代码库,来改变本地代码库的远程分支的位置。之后可以通过git merge origin/master
将远程分支的变更合并到本地分支。
- 标签 :
标注代码仓库中的某一个版本及其相应的信息,跟代码版本commit对象绑定,不会移动。
二、本地仓库精讲
1. 工作流
第一步:(初始化本地仓库、为本地添加远程仓库)/从远程仓库克隆代码
第二步:在工作区对项目代码进行开发修改,并将做出的更改加入暂存区
第三步:把暂存区的代码提交到本地仓库
2. 命令
1. git status # 查看当前工作区文件相对于暂存区和版本库的状态 例如:未跟踪、有更改待提交
2. git add filename # 将filename(更改后的文件)添加为跟踪状态,其实就是从工作区加到暂存区
3. git commit -m 'change_info' # 将暂存区的文件提交到版本库, -m允许添加更改信息 '这里是更改信息'
4. git log [--oneline] # 查看提交记录,可选项可以将每个提交记录各集中在一行
5. [git] rm file # 本地删除文件; 可选项会同时删除本地和缓存区的文件,最后去提交
6. git restore file # 从暂存区复制文件状态到工作区(撤销本地修改),前提是暂存区必须有前一个文件状态; git checkout -- file命令效果相同
7. git restore --staged file # 回撤暂存区到上一个状态;作用相同的指令: git reset [--] file
8. git commit -a -m 'info' # 把已被跟踪的工作区的更改同时加入暂存区和本地仓库
9. git checkout HEAD -- file # 获取本地仓库中最后一次提交的代码,用来覆盖工作区和暂存区
10. git reset [回退版本] # 从代码仓库获取指定版本覆盖暂存区,同时删除该版本之后提交的所有版本。 回退版本有三种表示方法
11. git reset --hard [回退版本] # 从代码仓库取得某个版本,同时覆盖暂存区和工作区
12. git revert [-n] head #撤销最新的提交(工作区和暂存区的最新修改也被撤销),但不删除提交记录,并生成一个新的提交记录。 -n:撤销,但不提交新生成的修改记录,需要手动提交。
13. `.gitignore`文件的配置,用来忽略不用被跟踪的文件
14. git diff [--staged]|[--cached] # 比较工作区和暂存区之间的差异;可选项比较暂存区和代码仓库之间的差异;git diff [版本1] [版本2] 比较两个版本之间的差异;git diff head 比较代码库和工作区之间的差异
三、远程仓库精讲
1. 基础概念讲解
远程仓库就是在远程服务器上的代码仓库,较为常用的是gitee、GitHub。
在之前三个区域的基础上,重点介绍分支:
- 生产分支/master分支:用来上线;
- 开发分支/develop分支:master分支的平行分支,用来开发新功能;开发出新功能、测试、稳定、合并到master分支、上线
- 功能分支:从develop分支创建的分支,开发出功能后再合并到develop的分支。
- 解决上线分支的问题:返回到master分支、创建fix分支、修复问题、测试、合并到master分支、上线
2. 命令
git
1.git branch <分支名> : 创建新分支
2.git branch:查看本地所有分支
3.git branch -v:查看各个分支的最后一次提交信息
4.git check <分支名>:切换到目标分支,本地工作区的内容也会更改
5.git check -b <分支名>:新建且切换到新分支
6.git branch -d <分支名>:删除分支
7.git merge <branch1>:把branch1合并到当前分支,可以再合并成功后删除被合并的分支
- 储藏
如果要换到别的分支工作,但是不想提交再当前分支的更改,那么就可以将更改储藏起来,下次切换回这个分支,可以取出储藏继续工作。
gitgit stash 储藏 git stash apply 获取储藏
如果什么都不做(提交、储藏)就切换到别的分支,则在这个分支做的更改会丢失。
- 远程分支
可以通过本地分支master创建新分支、也可以通过远程分支origin/master创建新分支
可以通过git fetch
来获取远程仓库的分支
通过远程分支创建本地分支:git checkout -b 新本地分支 远程分支
,这个命令创建的分支会自动跟踪远程分支
创建远程仓库的分支
在本地创建新分支:git branch 新分支
,在推送到远程仓库git push 远程仓库名 本地分支名:远程分支名
在远程仓库直接新建新分支
删除远程仓库的分支
某个分支不用了,直接删除这个分支,避免分支管理压力过大
在托管平台直接删除
在本地通过命令删除:git push 远程仓库名 --delete 分支名
,这可以删除本地的远程分支和远程服务器上对应的分支 - 标签
git
1.新建标签:git tag -a 标签名 -m '标签说明信息' -a会创建一个带注解的标签、-m指定对应的标签说明
2.查看标签信息和其指定的对象的信息:git show 标签名
3.追加标签:git tag -a 标签名 之前的提交版本 -m '标签说明信息'
4.列出所有标签:git tag
5.删除标签:git tag -d 标签名
6.推送标签到远程仓库:git push 远程仓库名 标签名
7.通过标签获得对应版本:git checkout -b 本地分支名 标签名
3. 生产环境工作流
- 创建远程仓库
- 初始化本地仓库:
git init
- 为本地添加远程仓库:
git remote add <shortname> <url>
- 查看本地现有的远程仓库:
git remote
- 删除远程仓库:
git remote rm 仓库名
- 获取远程仓库代码:
git pull 远程仓库名 远程仓库分支
- 推送本地仓库代码到远程仓库:
git push 远程主机名 本地分支名 远程分支名
;本地分支名和远程分支名相同时:git push 远程主机名 本地分支名
- 从远程仓库克隆代码:
git clone 远程仓库地址
- 代码拉取精讲:
git pull
;需要config文件中配置才能使用,否则,使用git branch --set-upstream-to=[origin/master]
进行配置 - 从远程仓库拉去代码,但不自动合并:
git fetch
拉取,需要手动合并git merge origin/master
- 合并冲突:两个人改动同一块代码时,推送时会出现冲突。解决:推送前拉取代码------>本地解决冲突------>推送
- ssh协议:本机生成私钥公钥
ssh-keygen -t rsa
------>配置公钥