GIt
- 不要把时间浪费在你一定会后悔的事情上
一、概念
1.实际开发场景
- 备份
- 代码还原
- 协同开发
- 追溯问题代码的编写人和编写时间
2.版本控制器的方式
- 集中式版本控制工具
1.版本库是集中存放在中央服务器的
2.必须联网才能工作,局域网或互联网
3.工具:SVN 和 CVS
- 分布式版本控制工具
1.没有中央服务器
2.每个人的电脑上都是一个完整的版本库
3.无需联网
4.工具:GIT
3.优点
- 速度快
- 对非线性开发模式的强力支持(允许成千上万并行开发的分支)
- 完全分布式
- 有能力高效管理类似Linux内核一样的超大规模项目(速度和数据量)
4.GIT工作流程图
- clone 克隆:从远先仓库中克隆代码到本地仓库
- checkout 检出:从本地仓库中检出一个仓库分支然后进行修改
- add 添加:在提交前先将代码提交到暂存区
- commit 提交:提交到本地仓库,本地仓库中保存修改的各个历史版本
- fetch 抓取:从远程仓库,抓取到本地仓库,不进行任何的合并动作,一般操作较少
- pull 拉取:从远程仓库拉到本地库,自动进行合并merge,然后放到工作区,相当于fetch+merge
- push 推送:修改完成后,需要团队成员共享代码时,将代码推送到远程仓库
二、安装与常用命令
1.常用Linux指令
- ls/ll 查看当前目录【隐藏文件用ll】
- cat 查看文件内容
- touch 创建文件
- vi vi编辑器
- 键盘点击 inset 变为可编写
- 编写完成,点击ESC
- 输入 :wq保存退出( :是需要打的)
2. 常用windows指令
- dir 查看查看当前目录
2.安装
- git-scm.com/download/wi…
- 下载后一路默认点下去
检查是否安装成功:桌面右键是否有GIT BASH HERE和 GIT GUI HERE
3.区别GIT BASH 和 GUI
- Git GUI: Git提供的图形界面工具
- Git Bash: Git提供的命令行工具,相当于微型的Linux窗口
4.基本配置
4.1 设置用户名和email地址
- 打开Git Bash
- 设置用户信息
git config --global user.name '用户名' git config --global user.email 'email地址'
- 若是输错了就重新输入一次
- 查看配置
git config --global user.name git config --global user.email
4.2为常用指令配置别名(可选)
- 打开用户目录,创建
.bashrc文件,touch ~/.bashrc - 在
.bashrc文件中输入
//用于输出git提交日志
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'
//用于输出当前目录所有文件及基本信息
alias ll='ls -all'
- 打开gitBash,执行
source ~/.bashrc
4.3 解决GitBash乱码问题
- GitBash
git config --global core.quotepath false - {git_home}是git安装的地址
export LANG='zh_CN.UTF-8'
export LC_ALL='zh_CN.UTF-8'
5 获取本地仓库
- 使用Git对代码进行版本控制
- 在电脑的任意位置创建一个空目录,作为本地Git仓库
- 进入仓库,右键git bash
- 执行命令
git init,初始化当前git仓库 - 创建成功后在文件夹下能看见隐藏的.git目录
6 基本操作指令
- 工作目录:除了.git文件都是工作目录
- git工作目录下对于文件的修改会存在几个状态,这些修改的状态会随着我们执行git命令而变化
6.1 查看修改的状态
git status
6.2 工作区 -> 暂存区
git add .or git add 单个文件名
6.3 暂存区 -> 仓库
git commit - m "提交的内容做了什么修改"
6.4 查看提交日志
git log [option]
-
option
- -all 显示所有分支
- --pretty=oneline 将提交的信息显示为一行
- --graph 以图的形式显示
- --abbrev-commit 使用输出的commitedid更简短
- 可以叠加使用
-
HEAD -> 分支名称代表当前分支是谁
6.5 版本回退
git reset --hard commitID
- commitID 可以使用
git-logorgit log指令查看
6.6 查看已删除的提交记录
git reflog
6.7 设置不希望被管理的文件
touch .gitignorevi .gitignore- 写入不希望被管理的文件名,退出
7.分支
- 把自己的工作从开发主分支上分离出来进行重大bug修改、开发新的功能,以免影响主线
7.1 查看本地分支
git branch
7.2 新建分支
- 方法一:
git branch 新分支名称 - 方法二:
git checkout -b 不存在的分支名- 新建分支 + 切换到新的分支
7.3 切换分支
git checkout 分支名
7.4 合并分支
git merge 分支名
-
fast-forward 快进模式
- 分支的内容和master一致,除了分支多了一个文件,可以直接把master分支名移动到当前分支上
-
把分支名的分支内容合并到当前分支上
7.5 删除分支
git branch -d 分支名
- 删除分支时,要做各种检查
git branch -D 分支名
- 不做任何检查,强制删除
7.6 解决冲突
- 背景:不同分支对同一段代码进行修改
- 合并后的文件:
- 解决办法:
- 手动解决冲突的地方
- 重新add 和 commit
7.7 开发中使用原则与流程
- master 生产分支
- 线上分支,主分支
- develop 开发分支
- 从master创建的分支,开发部门的主要开发分支,开发完成,合并到master分支,准备上线
- feature/XXX分支
- 从develop创建的分支,同期并行开发
- hotfix/XXX分支
- 从master派生的分支,一般作为线上bug修复使用,修复完成后需要合并到master、test、develop分支
- test分支
- 代码测试
- pre分支
- 预上线分支
三、Git远程仓库
1. 常用的代码托管服务
- gitHub
- 开源私有软件项目的托管平台
- GitLab
- 企业、学校内部搭建git私服,安全
- 码云
- 服务器在国内,速度快
2.注册码云
3.新建仓库
- 点击菜单栏加号,新建仓库
- 输入内容,点击创建
4. 配置SSH公钥
ssh-keygen -t rsa
- 不断回车
- 若公钥已经存在,则自动覆盖
5. 查看公钥
cat ~/.ssh/id_rsa.pub
6.本地仓库推码云上
- 点击gitee 图像 - 设置 - SSH公钥
- 粘贴本地设置的公钥
- 在git Bash中检验设置是否成功
ssh -T git@gitee.com- 会询问是否是第一次访问gitee,输入yes即可
- 点击 我的 找到要推上去的仓库,复制HTTPS
- 告诉本地仓库,远程仓库是哪一个
git remote add origin HTTPS地址origin是远程仓库的名字,一般取origin- 检验当前是否有远程仓库
git remote,显示origin则算成功
- 检验当前是否有远程仓库
- 本地仓库推到远程仓库
git push origin master,会弹出窗口输入gitee的账户和密码即可 - 刷新gitee界面,代码已经推上去了
7.操作远程仓库
7.1 添加远程仓库
git remote add <远端名称> <仓库路径>
- 远端名称,默认origin
- 仓库路径:从远端服务器获取的URL
移除remote
git remote remove 远端名称
7.2 查看远程仓库
git remote
7.3 推送远程仓库
git push [-f] [--set-upstream] [远端名称 [本地分支名称][:远端分支名]]- 若远程分支和本地分支名称相同,则可以只写本地分支
git push origin master --set-upstream推送到远端的同时并且建立起和远端分支的关联关系-f强制覆盖- 若当前分支已经和远端分支关联,则可以省略分支名和远端名
git push将master分支推送到已关联的远端分支
- 若远程分支和本地分支名称相同,则可以只写本地分支
7.4 本地分支和远程分支的对应关系
git branch -vv
- 未绑定
-已绑定:git push --set-upstream 远端名称 本地分支名称:远端分支名称
7.5 从远程仓库克隆
- 背景:已经有一个远端仓库,我们可以直接clone到本地
git clone HTTPS地址 [指定名字]- 不指定名字就是默认的名字
7.6 远程仓库抓取和拉取
-
抓取
git fetch [remote name] [branch name]- 将仓库里的更新都抓取到本地,不会进行合并
- 若不指定远端名称和分支名,则抓取所有分支
-
拉取
git pull [remote name] [branch name]- 将远端仓库的修改拉到本地并自动合并,等同于fetch+merge
- 若不指定远端分支和分支名,则抓取所有并更新当前分支
7.7 解决合并冲突
- 编写代码先
git pull,拉去最新的代码,解决代码冲突 - 解决完毕
git add .git commit -m "内容" - 再将代码推上去
git push