【书籍篇】Git 学习指南(二)提交与多次提交

本文详细介绍了Git的提交流程,包括提交的结构、访问权限、时间戳处理、add与commit操作,以及提交散列值的重要性。还讨论了提交历史查看、不同提交比较、多次提交的管理,如status命令的使用、暂存区和gitignore的运用,以及如何妥善处理不应提交的修改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


读前须知: 本篇章内容取自《Git 学习指南》 P18~P32,如需更多详细内容请购买正版书籍
上一章节: 【书籍篇】Git 学习指南(一)基础概念及入门
下一章节: 【书籍篇】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 +0800

    six commit

 dev.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 -all
 2 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.txt

Changes 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.txt

Untracked 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}恢复指定储藏内容
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值