GitHub和Git的关系与区别
-
简单来说,Git只是一个命令行工具,一个分布式版本控制系统。正是它在背后管理和跟踪你的代码历史版本,好比一个时光机,让你在代码出错时不至于手忙脚乱,能快速回退之前的历史版本。 类似的工具还有SVN
-
而GitHub是一个代码托管网站,背后使用Git作为版本管理工具(而非svn)。主要服务是将你的项目代码托管到云服务器上,而非存储在自己本地硬盘上。
类似的网站还有gitlab.com,bitbucket.com,coding.com(国内),gitee.com(国内)
1. Git 中的三个区域
使用 Git
管理的项目,拥有三个区域,分别是工作区、暂存区、Git
仓库(版本库)
2. Git 中的三种状态
-
已修改
modified
- 表示修改了文件,但还没将修改的结果放到暂存区
-
已暂存
staged
- 表示对已修改文件的当前版本做了标记,使之包含在下次提交的列表中
-
已提交
committed
- 表示文件已经安全地保存在本地的 Git 仓库中
注意:
- 工作区的文件被修改了,但还没有放到暂存区,就是已修改状态。
- 如果文件已修改并放入暂存区,就属于已暂存状态。
- 如果 Git 仓库中保存着特定版本的文件,就属于已提交状态。
3. 基本的 Git
工作流程
基本的 Git 工作流程如下:
① 在工作区中修改文件(新建、修改内容、删除都属于修改操作)
② 将你想要下次提交的更改进行暂存
③ 提交更新,找到暂存区的文件,将快照永久性存储到 Git 仓库
4. 工作区中文件的 4 种状态
工作区中的每一个文件可能有 4 种状态,这四种状态共分为两大类,如图所示:
四种转态
**Git 操作的终极结果:让工作区中的文件都处于“未修改”**的状态。



git 基本命令
命令 | 描述 |
---|---|
clear | 清屏 |
config --list | 查看配置信息 |
config --list --global | 查看所有的全局配置项 |
config user.name | 查看某一个配置项(指定的全局配置项) |
git help 或 git -h | 帮助信息 |
git help add | 查看 add |
git add -h | 查看 add |
git init | 初始化仓库 |
git clone | 克隆git 上面代码 |
status --short | 查看当前文件转态 |
status -s | 查看当前文件转态 |
add index.html | 问件添加到暂存区 |
add . | add 文件1 文件2 add . 所有文件添加 |
commit -m “新建了123.txt文件” | 提交到仓库 |
:q | 退出不提交 |
git commit -a -m “跳过了暂存区,直接提交^C仓库” | 跳过了暂存区,直接提交^C仓库 , 新创建的文件,未跟踪的文件不可以 |
.gitignore | 忽略一些文件/文件夹(更目录) |
git diff | 查看修改内容 |
返悔操作
命令 | 说明 |
---|---|
git log | 查看提交历史 , 回车下一页 |
git reflog | 查看历史命令 |
git log -2 --pretty=oneline | 在一行上展示最近两条提交历史的信息 |
git checkout – index.html | 撤销对文件的修改 危险性比较高,请慎重操作! |
git reset HEAD index.html | 取消暂存文件 |
git reset HEAD . | 取消所有文件暂存 |
git rm -f index.html | 同时删除工作区和仓库中的文件 ,删完要提交commit -m |
git rm --cache 111.txt | 删除本地仓库, 保留工作区文件 删完要提交commit -m |
reset --hard 111 | 回退到指定版本 |
撤销对文件的修改
- git checkout – index.html
取消暂存的文件
- git reset HEAD 要移出的文件名称
- git reset 文件名称
从 Git 仓库中移除文件
- git rm -f index.js Git仓库和工作区中同时移除
- git rm --cached index.css 只从 Git 仓库中移除 ,但保留工作区中的
回退版本
- git reflog 查看历史记录
- git reset --hard 指定的提交 ID 回退到指定版本
.gitignore格式规范(听一嘴)

文件 .gitignore
的格式规范如下:
① 以 # 开头的是注释
② 以 / 结尾的是目录
③ 以 / 开头防止递归
④ 以 ! 开头表示取反
⑤ 可以使用 glob 模式进行文件和文件夹的匹配(glob 指简化了的正则表达式)
- 星号 * 匹配零个或多个任意字符
[abc]
匹配任何一个列在方括号中的字符 (此案例匹配一个 a 或匹配一个 b 或匹配一个 c)- 问号 ? 只匹配一个任意字符
- 两个星号 ** 表示匹配任意中间目录(比如 a/**/z 可以匹配 a/z 、 a/b/z 或 a/b/c/z 等)
- 在方括号中使用短划线分隔两个字符, 表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)
gitignore 文件的例子
反悔操作
【1】撤销对文件的修改
**撤销对文件的修改指的是:**把对工作区中对应文件的修改,还原成 Git 仓库中所保存的版本。
**操作的结果:**所有的修改会丢失,且无法恢复!危险性比较高,请慎重操作!
git checkout -- index.html
**撤销操作的本质:**用 Git 仓库中保存的文件,覆盖工作区中指定的文件。
【2】取消暂存的文件
如果需要从暂存区中移除对应的文件,可以使用如下的命令:
git reset HEAD 要移出的文件名称 或者 git reset 文件名称
【3】移除文件
从 Git 仓库中移除文件的方式有两种:
① 从 Git 仓库和工作区中同时移除对应的文件
② 只从 Git 仓库中移除指定的文件,但保留工作区中对应的文件
# 从 Git仓库和工作区中同时移除 index.js 文件
git rm -f index.js
# 只从 Git 仓库中移除 index.css,但保留工作区中的 index.css 文件
git rm --cached index.css
注意:删除操作执行完,需要再做一次commit提交。
【4】回退版本
第1步,查看提交历史
如果希望回顾项目的提交历史,可以使用 git log
这个简单且有效的命令
# 按时间先后顺序列出所有的提交历史,最近的提交在最上面
git log
# 只展示最新的两条提交历史,数字可以按需进行填写
git log -2
# 在一行上展示最近两条提交历史的信息
git log -2 --pretty=oneline
# 在一行上展示最近两条提交历史信息,并自定义输出的格式
# &h 提交的简写哈希值 %an 作者名字 %ar 作者修订日志 %s 提交说明
git log -2 --pretty=format:"%h | %an | %ar | %s"
第2步,回退到指定的版本
# 在一行上展示所有的提交历史
git log --pretty=oneline
# 使用 git reset --hard 命令,根据指定的提交 ID 回退到指定版本
git reset --hard <CommitID>
# 在旧版本中使用 git reflog --pretty=oneline 命令,查看命令操作的历史
git reflog --pretty=onelone
# 再次根据最新的提交 ID,跳转到最新的版本
git reset --hard <CommitID>
创建远程仓库
- 创建 git 仓库
命令 | 说明 |
---|---|
mkdir name (文件夹名) | 新建文件夹 name |
cd name (文件夹名) | 进入 name 文件夹 |
git init | 初始化项目 |
touch README.md (文件名) | 新建 README.md 文件 |
git add README.md | 文件放入缓存区 |
git commit -m “放到缓存区” | 文件放到缓存区 |
git remote add origin https:// | 光联远程地址 |
git push | 把本地仓库推送到远程仓库 |
- 已有仓库
命令 | 说明 |
---|---|
git remote add origin https:// | 光联远程地址 |
git push | 把本地仓库推送到远程仓库 |
分支操作
本地仓库推送到远程仓库
1. https方式
2. ssh方式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ytrGsaFL-1649854776111)(C:\Users\shenlongfei\AppData\Roaming\Typora\typora-user-images\image-20220325113615744.png)]
多人协作流程

推送失败
解决 : 先拉后推
拉取冲突
解决 :
- 手动确定保留哪些代码
- 提交到本地仓库
- git add .
git commit -m再次提交
- git add .
- 再去推送代码到远程仓库
- git push