git add

简介

git add [参数] <路径>

作用就是将我们需要提交的代码从工作区添加到暂存区,add 添加的是文件改动,而不是文件名,就是告诉 Git系统,我们要提交哪些文件,根据目标文件的状态不同,此命令的效果也不同:

  • 可以用它开始跟踪新文件;
  • 把已跟踪的文件放到暂存区;
  • 还能用于合并时把有冲突的文件标记为已解决状态等)

当我们 git add 添加文件到缓存区后,如果你仔细观察的话,会发现你项目下的.git文件夹里面的 objects 文件夹都会发生变化,git会生成一个 40 位的 hash ,前两位 hash 值作为文件夹的名字,而 hash 值后 38 位作为文件名(blob 对象),只存储文件的内容,不存储文件名,如果我们两个文件内容一样,就只要一个object 就可以了。当你第一次 git add的话 .git 文件夹中会自动生成一个 index 文件(暂存区),之后的 git add 只会去更新 index 文件

index 文件是连接工作区和代码仓库的,在暂存区的 index 主要是为了代码仓库做准备,保存了我们在提交(commit)之前的当前的状态,状态包括了文件,如果有文件夹有目录,它也会包括这个目录,以及每个文件所对应的到底是哪个状态/具体内容是什么。

git add 仅仅是将文件添加到 index(暂存区),存储的方式是 key 为 40 位 hash 值,value 为 文件内容。


命令

$ git add . 

他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改以及新文件,但不包括被删除的文件

$ git add -u

-u 他表示将已跟踪文件中的修改和删除的文件添加到暂存区,不包括新增加的文件git add --update的缩写)

$ git add -A

-A 是上面两个功能的合集(git add --all的缩写)

$ git add -i

-i 它也是作用于版本库中已被跟踪的文件中的执行过修改与删除操作的文件

$ git add -h

-h 是查看帮助,使用 git add --help 可以查看更详细的内容

git commit

简介

git commit 主要是将暂存区里的改动给提交到本地的版本库。每次使用 git commit 命令我们都会在本地版本库生成一个 40 位的哈希值的文件,这个哈希值也叫 commit-id,同时.git文件夹里面的 objects 文件夹都会发生变化,他会生成一个 commit 对象和一个 tree对象,命名都是前两位 hash 值作为文件夹的名字,而 hash 值后 38 位作为文件名.

  • commit 对象里面的内容包含了 treeauthorparent 以及 committertree 指向了 git commit 同时生成的 tree 对象,而第一次 commit 时不会有 parent,其余 commitparent 会指向上一次 commitcommit-id

  • tree 对象里面的内容主要是这次提交的版本所对应的改动,它里面的文件的状态(里面有几个文件,它所对应的文件名和blob对象是什么)

命令

$ git commit -m <message>

-m 表示可以直接输入后面的提交信息,如果不加 -m 参数,那么是不能直接输入提交信息的,而是会调用vim 编辑器来进行编辑这个提交消息

$ git commit -a -m <message>

-a -m 主要的功能就是直接默认帮你执行 git addgit commit -m 这个命令

$ git commit --amend

这个命令我总结了它的两个功能:

​ 1. 可以修改上一次的提交信息。

​ 2. 可以将最近的修改追加到上一次的提交上

$ git commit --help

查看帮助,还有许多参数有其他效果

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐