首页 > 其他分享 >git add 命令详解

git add 命令详解

时间:2023-01-15 11:04:54浏览次数:41  
标签:文件 git cat add 暂存区 file 详解


1. 前言
2. git add 基本操作
3. git add 命令参数
4. git add 背后做了什么

1. 前言


众所周知,git 中有工作区、暂存区、版本库三大组成部分

工作区: 电脑中能看到的目录,也就是写代码的地方

暂存区: 英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件中,暂存区有时也叫做索引

版本库: 在工作区中有一个隐藏目录 .git,这个不算工作区,而是 git 的版本库

2. git add 基本操作


add 命令的作用就是将工作区的文件添加到暂存区

使用示例



  1. ​# 将某些文件提交到暂存区​
  2. ​git add <file1> <file2>​
  3. ​# 将某些目录提交到暂存区​
  4. ​git add <folder1> <folder2>​

3. git add 命令参数


​-A, --all​​ add changes from all tracked and untracked files 添加所有跟踪和未跟踪文件的更改

-A 参数会监控工作区的状态树,它会把工作区的所有变化提交到暂存区,包括修改(modified)、新文件(Untracked files)、删除的文件(deleted)。使用 ​​.​​​ 在 git 2.x 也可以达到一样的效果,但在 git 1.x 中不同的是 ​​.​​ 不会监控删除的文件

在 git2.x 中,下面两种用法的效果完全相同



  1. ​git add .​
  2. ​git add -A​

​-u, --update​​ update tracked files 只更新已被跟踪文件

只监控已经被 add 的文件,也就是 tracked files,不会监控没有被跟踪的新文件



  1. ​git add -u​

git add 命令详解_github

4. git add 背后做了什么


先说结论: ​​git add​​​ 会在 ​​.git/objects​​​ 目录下面创建一个目录和文件,并且在 ​​.git/index​​ 文件中添加一行内容

这里会说到 ​​git cat-file​​​ 命令,虽然平时不怎么用,但是它能帮助我们理解 ​​git add​​ 背后到底做了什么

创建一个 git 仓库,用于查看 git add 背后做了什么操作



  1. ​$ git init​
  2. ​$ echo 'hello git' >> 1.txt​
  3. ​$ git add 1.txt​
  4. ​$ .git/objects​
  5. ​├── 8d​
  6. ​│ └── 0e41234f24b6da002d962a26c2495ea16a425f​
  7. ​├── info​
  8. ​└── pack​

执行 git add 后:

1、git 会将工作区中的文件使用 hash sha-1 算法得到 40 位的 blob 对象 hash 字符串文件,文件中存储的是文件类型和使用算法压缩后的内容,如果查看文件的原始内容,需要使用 ​​git cat-file -p <hash>​​​。这个文件存放在 ​​.git/objects​​ 目录下

git add 命令详解_git_02

 

2、git 会在 ​​.git/index​​ 文件中增加一行内容,就是 hash 值对应的文件名。此时就实现了文件名和内容相对应的操作



  1. ​# 查看暂存区中的文件名​
  2. ​git ls-files​
  3. ​# 查看暂存区中的文件更多信息​
  4. ​git ls-files -s​

100644 指的是文件权限,hash 字符串对应 .git/objects 目录下的文件

git add 命令详解_暂存区_03

查看 hash 文件



  1. ​# 查看文件类型​
  2. ​git cat-file -t <hash>​
  3. ​# 查看文件内容​
  4. ​git cat-file -p <hash>​
  5. ​# 使用示例​
  6. ​git cat-file -t 8d0e412​
  7. ​git cat-file -p 8d0e412​

​git cat-file -t​​ 查看文件类型的返回值

类型

描述

blob

存储的是工作区文件的内容

tree

工作树

commit

提交记录信息以及工作树

标签:文件,git,cat,add,暂存区,file,详解
From: https://blog.51cto.com/10zhancom/6008363

相关文章

  • git checkout 命令详解
    1.前言2.创建分支3.切换分支4.撤销更改1.前言gitcheckout命令用于创建、切换分支或恢复工作树文件。最常用的两种用法​​#切换分支​​​​gitcheckout<bra......
  • git clone 拉取远程仓库
    1.gitclone拉取仓库2.以HTTPS方式拉取仓库3.以SSH方式拉取仓库1.gitclone拉取仓库拉取远程库的默认分支​​gitclone<repositories>​​拉取远程库的指定......
  • git merge 命令详解
    1.前言2.合并场景之Fast-forward(快速合并)3.合并场景之threewaymerge(三路合并之正常合并)4.合并场景之threewaymerge(三路合并之冲突合并)5.中止合并1.前言将......
  • git stash 命令详解
    1.应用场景2.添加储藏3.查看储藏4.删除储藏5.使用储藏6.常见用法1.应用场景gitstash命令用于将工作区中的更改和暂存区中的内容储存起来日常开发中,会经常遇到......
  • git switch 命令详解
    1.前言2.switch创建分支3.switch切换分支1.前言checkout命令具有 ​​分支的管理​​​ 和 ​​文件的恢复​​ 两个核心功能,功能较多、不够准确。在git2.23......
  • git clean 命令详解
    1.gitclean介绍2.gitclean使用3.clean和reset命令1.gitclean介绍gitclean命令用于删除工作目录中没有被tracked的文件这个命令很多人都不知道,也不去用它,而......
  • lsof命令详解
    说明​lsof是关于文件打开信息的标准输出工具输出标题COMMAND:进程的名称PID:进程标识符USER:进程所有者FD:文件描述符,应用程序通......
  • ethtool命令详解
    说明ethtool是一个针对网卡驱动的工具,通过驱动暴露给NAPI的接口调用。选项ethtooleth0:查询ethx网口基本设置。-a:查看网卡中接收模块RX、发送模块TX和Autonegotiat......
  • findmnt命令详解
    findmnt主要是用来查看文件系统信息的工具数据来源:/etc/fstab/etc/mtab/proc/self/mountinfo帮助信息:➜~findmnt--helpUsage:findmnt[options]findmnt......
  • 第十九节:Pinia简介及state、getter、action详解、常用Api、setup简化写法
    一. 简介       二.state       三.getter     四.action   五.常用Api    六.setup简化写法   ......