git基础
# 版本控制
版本控制软件是一个用来记录文件变化,以便将来查阅特定版本修改情况的系统,因此有时也叫�? “版本控制系统�?
- 操作简�?
- 易于对比
- 易于回溯
- 不易丢失
- 写作方便
# 分类
- 本地版本控制系统
- 集中化的版本控制系统
- 分布式版本控制系�?
本地版本控制系统
使用软件来记录文件的不同版本,提供了工作效率。降低了手动维护版本的出错率
缺点�?
单机运行,不支持多人协作开�?
版本数据库故障后,所有历史更行记录会丢失
集中化的版本控制系统 SVN
服务器保存文件的所有更新记�?
客户端只保留最新的文件版本
优点:联网运行,支持多人协作开�?
缺点�?
不支持离线提交版本控制更�?
中心服务器崩坏之后,所有人无法正常工作
版本数据库故障后,所有历史更新记录会丢失
分布式版本控制系�?
服务器保存文件的所有更新版�?
客户端是服务器的完整备份,并不是只保留文件的最新版�?
优点�?
联网运行,支持多人协作开�?
客户端断网后支持离线本地提交版本更新
服务器故障或损坏之后,可以使用任意一个客户端的备份进行恢�?
# 版本控制差异
# Git
Git是一个开源的分布式版本控制系统,是目前世界上最先进、最流行的版本控制系统。可以快速高效地从一个很小到非常大的项目版本管理
- 直接记录快照,而非差异比较
- 近乎所有操作都是本地执�?
# Git中的三个区域
工作�?
**暂存�? **
Git仓库
# Git中的三种状�?
已修�? modified:表示修改了文件,但是还没将修改的结果放到暂存区
已暂�? staged:表示对已修改的文件的当前版本做了标记,使之包含在下次提交的列表�?
已提�? committed�? 表示文件已经安全地保存在本地�? git 仓库�?
工作基本流程�?
- 在工作区中修改文�?
- 将你想要下次提交的更改进行暂�?
- 提交更新,找到暂存的文件,将快照永久性存储到 Git 仓库
# 基本操作
# 配置用户信息
git config --global user.name "Your name"
git config --global user.email "XX@XX"
2
# 查看所有的全局配置�?
git config --list --global
# 获取帮助信息
浏览器显�? git help [xxx]
or
终端显示 git [xxx] -h
# 获取GIt仓库
在现有目录中初始化仓�?
git init
拉取
# Git工作区的四种状�?
未修改和已修改是�? git 仓库中的文件内容进行对照
# 查看文件的状�?
git status
精简的方式显�?
git status -s
# 添加跟踪文件
git add [xxx]
# 提交更新
git commit -m "message"
# 文件的基本状态变�?
- 文件初始创建是未跟踪状�? Untracked files 红色
git add
之后文件是未修改状�? Unmodified 绿色git commit
之后文件是已暂存状�? Staged 绿色 文件是未修改- 文件内容修改之后是已修改状态modified 红色 加入暂存区后�? 绿色
# 撤销对文件的修改
对未加入暂存区的文件修改,还原成 Git 仓库中所保存的版�?
git checkout -- [index.html]
# 取消暂存的文�?
git reset HEAD 文件的名�?
# 跳过暂存�?
工作�? - 仓库
git commit -a -m "message"
# git仓库移除文件
�? git 仓库和工作区中同时移除文�?
git rm -f index.js
1只从 git 仓库中移除文件,但保留工作区中的文件
git rm --cached index.js
1
# 查看提交历史
git log
other
# 只展示最新的 N 条提交历�?
git log -2
# 在一行上展示最新的 N 条提交历�?
git log -2 --pretty=online
# 自定义输出格�?
# %h哈希�? %an作者的名字 %ar修改日期 %s 提交说明
git log -2 --pretty=format:"%h | %an | %ar | %s"
2
3
4
5
6
7
# 回退版本
# 在一行上展示所有的提交历史
git log --pretty=online
# 使用 git reset --hard 命令,根据指定的提交 ID 回退到指定版�?
git reset --hard <CommitID>
# 回退到旧版本时,需要展示所有的历史版本
git reflog --pretty=online
# 再次根据最新的提交 ID ,跳转到最新的版本
git reset --hard <CommitID>
2
3
4
5
6
7
8
9
10
11
# git忽略文件
.gitignore
配置文件,对需要忽略的文件配置
格式规范�?
- �?
#
开头的是注�? - �?
/
结尾的是目录 - �?
/
开头防止递归 - �?
!
开头表示取�? - 可以使用 glob 模式进行文件和文件夹的匹�?
glob模式 - 简化的正则表达式:
- 星号
*
匹配零个或多个任意字�? [abc]
匹配任何一个列在方括号中的字符- 问号
?
只匹配一个字�? [0-9]
表示所有在这两个字符范围内的都可以匹配- 两个星号
**
表示匹配中间目录(a/**/z 可以是a/z , a/b/z...�?
案例
# 忽略所有的 .a文件
*.a
# 跟踪所有的 lib.a 文件
!lib.a
# 只忽略当前目录下�? TODO 文件,而不忽略文件夹下�? xxx/TODO 文件
/TODO
# 忽略任何目录下名�? build 的文件夹
build/
# 忽略 doc/notes.txt , 但不忽略 doc/server/arch.txt
doc/*.txt
# 忽略 doc/ 目录及其所有子目录下的 .pdf 文件
doc/**/*.pdf
2
3
4
5
6
7
8
9
10
11
12