Git
一、 前言
学习资料:git 官网
1.为什么要学习 Git
Git 是一个分布式版本控制系统。
二、Git 优点
- 完全分布式
- 能高效管理大型项目
- 非线性分支管理系统(Git 分支)
- 直接记录快照,而非差异比较
- 近乎所有的操作都是本地执行
- Git 保证完整性(Git 的数据在存储前都要计算校验和)
- Git 一般只添加数据
2、初识 Git
1、已提交、已修改、已暂存
- 三种状态
- 已提交 commited : 数据已安全地保存在数据库中。
- 已修改 modified : 修改了文件,但还没保存到数据库中。
- 已暂存 staged : 对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
2、工作区、暂存区、git 目录
工作区是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
暂存区是一个文件,保存了下次将要提交的文件列表信息,一般在 Git 仓库目录中。 按照 Git 的术语叫做“索引”,不过一般说法还是叫“暂存区”。
Git 仓库目录是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时 ,复制的就是这里的数据。
流程
- 在工作区修改文件
- 将要提交的文件暂存(添加到暂存区)
- 将暂存区的文件提交(提交到 Git 目录/仓库)
三、Git 环境配置
1、安装
2、初次运行 Git 前的配置
1、git config
文件位置(三个地方,优先级由低往高依次是)
- /etc/gitconfig 修改这个文件时需要使用 git config --system (需要 root 权限)
- ~/.gitconfig 或者 ~/.config/git/config : 只对当前用户有效,修改时需要使用 git config --global (对系统上当前用户所有的仓库生效)
- 当前 git 目录的 config 文件 (.git/config) : 使用 git config --local 修改
# 查看所有的配置,以及所在的文件
git config --list --show-origin
# 设置用户信息
git config --global user.name "wangzhy"
git config --global user.email "iwangzhy@gmail.com"
# 指定文本编辑器
git config --global core.editor vim
# 查看所有的配置
git config --list
# 查看指定配置
git config user.name
# 查看帮助信息
git help config
git config -h
四、Git 基础
1、获取 Git 仓库
- 自己初始化一个 Git 仓库
git init
- 克隆一个 Git 仓库
git clone
会把服务器上的每一个文件的每一个版本都拉取下来
git clone https://github.com/iwangzhy/picgo
2、记录每次更新到仓库
工作目录下的文件只有两种状态
- 跟踪 tracked
- 未跟踪 untracked
1、检查当前文件状态
git status
2.跟踪新文件
git add filename
文件状态会变为 Staged (使用 git status
会显示在 Changes to be committed
下面)
3.暂存已修改的文件
如果修改了已经被跟踪的文件,使用 git status
命令,会显示在 Changes not staged fot commit
下面
4、git add
- 跟踪新文件
- 把已跟踪的文件添加到暂存区
- 合并时把有冲突的文件标记为已解决状态
5、git status -s
简化输出
- ?? :新添加的未跟踪的文件
- A :新添加到暂存区中的文件
- M :修改过的文件
左边暂存区,右边工作区
M 工作区文件已修改,但未暂存
MM 工作区文件已修改,且暂存后又做了修改
A 新添加暂存区的文件
M 文件被修改,且暂存
?? 未被跟踪的文件
6、.gitignore
文件
.gitignore
文件规范
- 所有空行或者以
#
开头的行都会被 Git 忽略。 - 可以使用标准的 glob 模式匹配,它会递归地应用在整个工作区中。
- 匹配模式可以以(
/
)开头防止递归。 - 匹配模式可以以(
/
)结尾指定目录。 - 要忽略指定模式以外的文件或目录,可以在模式前加上叹号(
!
)取反。
* 匹配任意字符
[abc] abc 中的任意一个字符
? 匹配任意一个字符
[0-9]
** 匹配任意中间目录 例如 a/**/z 可以匹配 a/z、 a/b/z、 a/b/c/z
Java.gitignore
# Compiled class file
*.class
# Log file
*.log
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.nar
*.ear
*.zip
*.tar.gz
*.rar
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
replay_pid*
7、查看已暂存和未暂存的修改
git diff
比较工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没暂存起来的变化内容
git diff --staged
查看已暂存的将要添加到下次提交里的内容
- 当前做的哪些更新尚未暂存? 通过
git diff
- 有哪些更新已暂存并准备好下次提交? 通过
git diff --staged
git diff --cached
与git diff --staged
等效
8.提交更新
git commit
会弹出编辑器(core.editor),要求输入提交信息。
git commit -m "commit message"
指定提交信息
提交时记录的是放在暂存区域的快照。 任何还未暂存文件的仍然保持已修改状态,可以在下次提交时纳入版本管理。 每一次运行提交操作,都是对你项目作一次快照,以后可以回到这个状态,或者进行比较。
9.跳过使用暂存区
git commit -a
会自动把所有已经跟踪过的文件暂存起来并提交。
11.移动文件
git mv file_from file_to
等价于
mv file_from file_to
git rm file_from
git add file_to
10.移除文件
git rm filename
从工作目录中删除指定文件(会删除文件)
git rm -f filename
删除指定文件(已经修改或已经添加到暂存区的文件)
git rm --cached filename
让指定文件不在让 git 跟踪,还保留在磁盘中。
3、查看提交历史
git log
git log -p -2
git log --stat
# --pretty 的值有 oneline、short、full、fuller
git log --pretty=oneline
git log --pretty=format:"%h - %an , %ar : %s"
git log --pretty=oneline --graph
git log --since=2.weeks
git log --pretty=format
常用的选项
4.撤销操作
1.修改 commit message
# 注意,这个命令会将暂存区的文件提交
git commit --amend
2.取消暂存的文件
# 取消指定文件的暂存
git reset HEAD <file>...
git reset HEAD hello.md readme.md