Git 学习指南(二)提交与多次提交
- 三. 提交
- 3.1 访问权限与时间戳
- 3.2 add与commit
- 3.3 再谈提交散列值
- 3.4 提交历史
- 3.5 略有不同的提交查看方法
- 3.6 同一项目的多部不同历史
- 四. 多次提交
- 4.1 status命令
- 4.1.1 选择性修改
- 4.2 存储在暂存区中的快照
- 4.3 怎样的修改不该被提交
- 4.4 用.gitgnore忽略非版本控制文件
- 4.5 储藏
读前须知: 本篇章内容取自《Git 学习指南》 P18~P32,如需更多详细内容请购买正版书籍
上一章节: 【书籍篇】Git 学习指南(一)基础概念及入门
下一章节:
三. 提交
使用 git log --stat -1 命令来看一下提交中究竟包含了哪些重要信息
commit: 散列值
Author: 作者相关信息
Date: 提交被创建的日期
提交时的注释信息
说明的是哪些文件自上一版本以来发生了变化
$ git log --stat -1
commit 3d681ecb56db44fc6f31c927140049fbfe24c32f (HEAD -> master)
Author: jieKaMi <l>
Date: Tue Nov 21 00:17:43 2023 +0800six commitdev.txt | 2 +-1 file changed, 1 insertion(+), 1 deletion(-)
3.1 访问权限与时间戳
(1)Git会保存每个文件原有的访问权限(即POSIX文件权限,包含读、写、执行),但不会保留文件的修改时间。因此在执行检出操作时,文件的修改时间会被设置为当前时间
(2)我们进行一次新的建构过程,由于GIT在进行检出操作时总是用当前时间来充当文件的修改时间,所以就能确保这些工具正确,顺畅地完成整个构建过程。
3.2 add与commit
操作:(1)在原版库中做一些修改 (2)将所有修改纳入下次提交 (3)提交
$ cd /f/git-dev/
$ git add --all
$ git commit --message "add -all"
[master 45299b3] add -all2 files changed, 2 insertions(+), 1 deletion(-)create mode 100644 test.txt
3.3 再谈提交散列值
使用散列值的好处:
(1)可以本地生成,无需与其他计算机或中央服务器进行通信就可以创建新的提交
(2)根据文件内容及其元数据(作者、提交时间)计算出来的散列值相同的概论非常低
(3)散列值的信息比一个软件版本的名称要多得多
可以使用过 git fsck [散列值] 命令来查看版本库的完整性([散列值]可以用git log --oneline里的简单信息代替)
3.4 提交历史
3.5 略有不同的提交查看方法
命令 | 描述 |
---|---|
git diff [散列值] HEAD | 完整的差异清单 |
git diff [散列值] ^! | 与上一次提交进行比较 |
git diff [散列值] [散列值] – [path] | 限制文件范围 |
git diff --stat [散列值] [散列值] | 显示每个文件中的修改数量 |
3.6 同一项目的多部不同历史
命令 | 描述 |
---|---|
git log | 简单的日志输出 |
git log -n 3 | 部分输出,只显示该项目的最后三次提交 |
git log --oneline | 概述信息 |
git log --format=fuller | 更多细节 |
git log --stat | 显示被修改的那些文件 |
git log --shortstat | 显示保护被修改的文件的目录 |
git log --graph | 显示个提交之间的关系 |
四. 多次提交
(1)使用add命令将所有相关的修改纳入到一个 缓存区(buffer) 中
(2)使用commit命令将缓存区中的修改传送到版本库中
4.1 status命令
操作: (1)修改dev.txt并add该文件(2)删除prod.txt、新增test.txt (3)执行git status
解析
(1)Changes to be committed: 列出那些将在下次提交被纳入版本库中、被修改的文件
(2)Changes not staged for commit: 列出已经被修改,但尚未被注册到下次提交的文件 (与书中有点差异)
(3)Untracked files: 列出所有新增的文件
$ git status
On branch master
Changes to be committed:(use "git reset HEAD <file>..." to unstage)modified: dev.txtChanges not staged for commit:(use "git add/rm <file>..." to update what will be committed)(use "git checkout -- <file>..." to discard changes in working directory)deleted: prod.txtUntracked files:(use "git add <file>..." to include in what will be committed)test.txt
4.1.1 选择性修改
略。。。详细内容《Git 学习指南》 P27
4.2 存储在暂存区中的快照
略。。。详细内容《Git 学习指南》 P28~P29
4.3 怎样的修改不该被提交
不想提交的修改:(1)为调试而做的实验性修改(2)意外添加的修改(3)尚未准备好的修改(4)自动生成的文件中所发生的修改
解决方案:
(1)使用reset命令重置那些实验性的或者被意外修改的内容
(2)将我们不希望被提交的忽略文件列表写入.gitgnore
(3)是由stash命令将我们希望日后再提交的修改内容暂时保存起来
4.4 用.gitgnore忽略非版本控制文件
(1)支持使用 * 和 &等通配符
(2)只能影响非交由Git来管理的软件,统一通过update-index命令的–assume-unchangde来忽略已经被版本化的文件
4.5 储藏
命令 | 描述 |
---|---|
git stash | 将工作区和缓存区中的修改保存在一个被我们称之为储藏栈的缓存区中 |
git stash pop | 恢复位于栈顶的被储藏修改 |
git stash list | 查询当前储藏了什么修改内容 |
git stash pop stash@{0} | 恢复指定储藏内容 |