简介
- 什么是git?
1> git 是一款开源的 分布式 版本控制工具 (我们常用的svn 是一种集中式版本控制工具).
2> git 在世界上所有的分布式版本控制工具中,git 是最简单\最快\最六次那个的.
- git的起源
作者是 linux 之父,作者用了10天就写完了 👍
-
集中式 与 分布式 图解
git 和 svn 的简单对比
1> 速度方面: git 提交速度在多数情况下比svn 快.(git 在本地有本地的仓库)
2> 结构: svn 集中式,git 分布式
3> 其他:svn 使用分支比较笨拙,git 可以轻松拥有多个分支,svn 联网 才能用,git本地不联网也可以提交.
4> 旧版本的svn 会在每个目录下放置一个.svn 文件, git 只会在根目录下放置一个 .git 目录.
- git 的工作流程
- 分布式和集中式 最大的区别:
1> 在分布式下,开发者可以本地提交.
2> 每个开发者机器上有一个服务器的数据库.
git 命令行的演练
- 初始化git仓库
> cd 仓库目录
> git init (仓库初始化)
- 配置git 的邮箱和用户名
使用git的前提: 必须给git 配置一个'邮箱'和'用户名' 告诉这个Git 现在是谁在使用
> 配置单独Git仓库用户名和邮箱:
git config user.name "mango"
git config user.email "690852195@qq.com"
注意,在配置用户名和邮箱时,时没有任何提示的,如果有提示说明配置时 有地方可能出错了
> 查看单独Git仓库配置的git的用户名和邮箱:
直接进入当前git 根目录的 .git 目录,找到config 文件打开即可看见.
>配置电脑上git 的全局邮箱和用户名:
git config --global user.name "mango"
git config --global user.email "690852195@qq.com"
> 查看全局Git仓库配置的git的用户名和邮箱:
个人 -> .gitConfig 查看
配置全局邮箱和用户名的好处,当本地仓库没有设置邮箱和用户名时 可以默认使用全局的用户名和邮箱,如果本地仓库有配置邮箱和用户名的化就使用本地的用户名和仓库
- git 的常用操作
1> 查看git 文件状态
git status
红色文字表示该文件被修改或添加但没有提交到git 本地的暂缓区
绿色文字表示该文件被提交到git 本地的暂缓区,但没有提交到本地仓库
2> 提交文件到暂缓区
git add .
3> 提交暂缓区的文件到本地的代码仓库
git commit -m '提交文件描述'
文件从暂缓区提交到本地仓库后,git 会清空暂缓区
4> 给命令行取别名(alias)
git config alias.st "status"
意思是个 status 取一个别名 st ,此后可以使用 st 代替 status
如: git status == git st
git config alias.xxyy "commit -m"
别名配置后可以在 .git 的config 文件中查看和 个人的.gitConfig 文件中查看当前配置了的别名
5> 删除文件
git rm person.m 将person.m 文件删除
git commit -m '删除文件描述'
6> 查看版本信息
git log 版本号是一个由 sha1 算法生成的40 位哈希值
git reflog 也可以查看版本号(更强大),可以查看所有版本回退的信息
7> 版本回退
- 本地回退
git reset --hart HEAD 强制恢复(回退没有提交的代码)
git reset --hard HEAD^ 回退到上一个提交版本
git reset --hard HEAD^^ 回退到上上一个提交版本
git reset --hard HEAD~10 回退到前10个提交版本
git reset --hard 12345 版本号(前5位) 通过git log 查看到的版本号
git 的工作原理
- git 的几个核心概念
> 工作区(working directory): 根目录里面除了 .git 目录 外的内容
> 版本库(Repository): .git 目录 ,用于存储记录版本信息
暂缓区: (stage)
分支(master): git 自动创建的第一个分支
HEAD指针(游标): 用于指向当前的分支
> git add 和 git commit 的原理
git add 把修改或者新添加的文件(从工作区文件目录)添加到暂缓区
git commit: 把暂缓区的文件内容提交到当前分支(HEAD 指向的分支,比如master分支)
原理图
共享版本
- git 服务器的搭建非常的繁琐(需要使用 linux)
- 可以把版本托管到 github和oschina
- 一个文件夹
- 一个U盘
一个文件夹作为一个共享版本库
1.将一个文件夹作为一个共享版本
cd 目录
git init --bare 生成的这个仓库是没有.git 这个文件夹的(说明是一个共享版本库),其实也可以查看config 文件,共享版本库的 bare 属性是true,.git 文件内的 config 内的bare 是false.
2.将共享版本库的所有内容下载到本地(初始化项目)
git clone 共享版本库地址
3.删除忽略文件(在项目开发中 有些文件是不需要的)
cd 本地目录
touch .gitignore 生成一个 忽略文件
.gitignore 中填写的具体内容可以在 github 中搜索 ignore 找到粘贴即可
4.在对应的目录下创建工程即可 合作开发
git add .
git commit -m '初次创建工程'
git push origin master
- git 冲突的处理
1> git reset --hard HEAD^ 回退到上一个版本(指的是本地仓库) eg: 1.0.1
2> git push -f 强制上传到共享版本库(相当于的更新远程仓库) eg: 1.0.1
3> git pull
版本备份
以下是一个简单的备份示例流程:
1> 1.0 版本开发完毕,将1.0 版本上传到商店,对1.0 版本进行备份(打标签).
git tag -a 1.0.0 -m '1.0版本上线' 本地打标签
(也可以简写 git tag '1.0.0' )
(顺便提下:git tag -d 1.0.0 删除本地标签)
2> 需要将标签 push 到共享版本库
git push origin 1.0.0 上传本地的1.0.0 标签到 共享版本库(上传单个标签)
(也可以使用命令:git push --tags 上传所有的本地标签)
(顺便提下:git push origin :1.0.0 删除远程标签)
3> 开始2.0 版本的开发
2.0 开始编码 并提交版本到 共享版本库
4> 发现1.0 版本有bug,在 xxx 的电脑下面创建一个文件夹,用于修复bug,将共享版本库clone.
git clone xxx 地址 当前clone下来的代码是 正在开发的2.0 版本(包含完整的1.0.0 的代码)
5> 将当前的2.0ing 代码转为1.0标签, 创建分支并切换到分支.
5.1> git checkout 1.0.0 将当前的2.0 的版本切换到1.0.0 分支(2.0 新增的代码将会被自动删除)
5.2> git checkout -b 1.0.0fixBug 这时就将 1.0.0 切换到了一个新的分支
6> 在分支中修复bug.将修复好的代码打上tag,并上传到共享版本库.
git add .
git commit -m '修复了1.0.0 的bug 的1.0.1 版本'
git tag -a '1.0.1' -m '修复了1.0.0 的bug 的1.0.1 版本'
git push origin 1.0.1 提交对应的标签到远程仓库
7> 根当前正在开发的2.0 版本进行合并.
将 1.0.1 的代码 pull 到 2.0 ing 中
8> 删除分支
git branch 查看当前分支
git branch -r 查看本地版本库分支
git checkout master 从当前的分支切换到master 分支
git branch -d 1.0.0fixBug 删除 1.0.0fixBug 本地分支
git branch -r -d origin/1.0.0fixBug 删除本地版本库分支
git push origin --delete 1.0.0fixBug 删除共享库中的1.0.0fixBug 分支
9> 补充:
git push 403 错误
原因:本地缓存了用户名和密码
解决方法:重新设置用户名和方法:
以远程仓库https://github.com/TangChangTomYang/h264.git 为例
step 1: git remote set-url origin https://ayngrui@github.com/TangChangTomYang/h264.git
step 2: 这时push时就会提示 输入用户名 yangrui 对应的密码即可
新人共享版本库
将代码托管到github 上
- SSHKeys 认证
1> 公钥: 存在github 上 用来解密的
2> 私钥: 存在本地的一个 .ssh 隐藏文件(个人 -> .ssh)里使用来加密的
- 通过终端查看当前电脑是否存在 sshkeys
ls -al ~/.ssh
- 通过终端生成SSHkey
1> 打开终端
2> ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
3> 一般来说直接回车 直到出现一个奇怪的图案 就可以了, 在 .ssh 中查看即可
git简单总结(二)版本操作相关 https://www.jianshu.com/p/7ab413165eb3