基础
- 直接记录快照,而非差异比较
Git 保存数据的方式- 每次提交都会有一个提交对象,包含提交信息、树对象的指针、父对象的指针,首次提交的父对象为空
- 树对象:记录着目录结构和 blob 对象索引
- blob对象:保存着文件快照
- 近乎所有操作都是本地执行
- Git 保证完整性
- 一般只添加数据
- 三个工作区:Git 仓库、工作目录、暂存区域
配置GIT
- 配置的级别
- 所有用户;设置:
git config --system ...;文件位置:/etc/gitconfig - 当前用户;设置:
git config --global ...;文件位置:~/.gitconfig - 当前仓库;设置:
git config ...;文件位置:.git/config - 优先级:3 > 2 > 1
- 所有用户;设置:
- 配置属性
- 用户名称:
git config user.name "wangzhi" - 邮件地址:
git config user.email wangzhi@wangzhi.com - 别名:
git config alias.commit commit - 查看所有配置:
git config --list - 查看某个属性的配置:
git config user.name
- 用户名称:
忽略文件
可以在.gitignore中配置忽略文件信息,格式规范如下:
- 所有空行或者以 # 开头的行都会被 Git 忽略。
- 可以使用标准的 glob 模式匹配。
?、**、*、[] - 匹配模式可以以(/)开头防止递归。
不寻找子目录 - 匹配模式可以以(/)结尾指定目录。
- 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
获取Git仓库
git initgit clone [url]
Git中的文件状态
- 未跟踪、未修改、已修改、已暂存
- 查看当前状态:
git status -s - 提交到暂存区:
git add .
查看修改
- 查看工作区:
git diff - 查看暂存区:
git diff --staged/git diff --cached
提交修改
- 提交暂存区的修改:
git commit -m'commit message' - 提交所有已跟踪的修改:
git commit -am'commit message
移除文件
- 工作区和仓库都移除:
git rm -f [filePath] - 只是在仓库中移除:
git rm --cached [filePath]
移动文件
git mv [file_from] [file_to]
查看提交历史
git log,可以跟一些选项
-p:显示每次提交的内容差异-N:仅显示最近N次提交--stat:每次提交的简略的统计信息--graph:形象地展示你的分支、合并历史
撤销操作
- 与上一次提交合并,提交信息重新编辑:
git commit --amend - 将暂存区的文件重新放回工作区:
git reset [filePath]
文件内容不变,如果工作区又做了修改将会丢弃暂存区的修改 - 取消文件在工作区的修改:
git checkout -- [filePath] - 将文件恢复到指定版本:
1:git checkout [version] [filePath] - 在历史之间穿梭:
git reset [version]
一个假例子:我们要将整个工作区回退到指定版本可以这样操作:
1:git checkout -b [branchName]
2:git reset [version] - 重置揭密
分支 Git分支简介
- 查看分支:
git branch - 新建分支并切换到该分支:
git checkout -b [branchName] - 推送到远程仓库:
git push [remote-name] [branch-name] - 删除分支:
git branch -d [branchName] - 合并目标分支到当前分支:
git merge [branchName]
标签
- git中的两种标签类型:
轻量标签(lightweight)附注标签(annotated) - 查看当前的标签:
git tag - 添加一个标签:
git tag -a [tagName] -m 'message' [version] - 推送到远程仓库:
git push [remote-name] [tagName]git push [remote-name] --tags
- 检出标签:
git checkout -b [branchname] [tagname]
使用远程仓库
- 查看当前的远程仓库:
git remote -v - 查看远程仓库的详细信息:
git remote show [remote-name] - 添加一个远程仓库:
git remote add [shortname] [url] - 从远程仓库中抓取(不自动合并):
git fetch [remote-name] - 从远程仓库中抓取(自动合并):
git pull [remote-name] [branch-name]
会从最初克隆的服务器上抓取数据并自动尝试合并到当前所在的分支。 - 删除一个远程分支:
git push [rempoteName] --delete [branchName]]
储藏与清理
- 新建储藏:
git stash save -u [message] - 查看储藏列表:
git stash list - 应用储藏:
git stash apply [stashName]