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



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


    三. 提交


    使用 git log --stat -1 命令来看一下提交中究竟包含了哪些重要信息

    commit: 散列值

    Author: 作者相关信息

    Date: 提交被创建的日期

    ​ 提交时的注释信息

    说明的是哪些文件自上一版本以来发生了变化


    $ git log --stat -1
    commit 3d681ecb56db44fc6f31c927140049fbfe24c32f (HEAD -> master)
    Author: jieKaMi 
    Date:   Tue Nov 21 00:17:43 2023 +0800
    
        six commit
    
     dev.txt | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    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 ..." to unstage)
    
            modified:   dev.txt
    
    Changes not staged for commit:
      (use "git add/rm ..." to update what will be committed)
      (use "git checkout -- ..." to discard changes in working directory)
    
            deleted:    prod.txt
    
    Untracked files:
      (use "git add ..." to include in what will be committed)
    
            test.txt
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    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}恢复指定储藏内容
  • 相关阅读:
    python基于PHP+MySQL的学生宿舍管理系统
    论文阅读 DynGEM: Deep Embedding Method for Dynamic Graphs
    (七)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
    Code-Audit(代码审计)习题记录4-5
    找不到msvcp140.dll的解决方法,以及msvcp140.dll丢失的原因
    nodejs 简介
    【electron】实战技巧(持续更新,不要错过喔)
    c++文件操作
    想用最快的方法从很多名单中搜到符合条件的人
    uni-app 之 文件(图片、视频.....)上传与下载
  • 原文地址:https://blog.csdn.net/TheNew_One/article/details/134543442