20 分钟教你搞懂 Git!

  • 时间:
  • 浏览:0

first commit

git ls-files命令可以 显示索引中当前的内容。

git init只做了一件事情,那就说 我在项目的根目录下创建.git子目录来保存版本信息。

commit 785f188674ef3c6ddc5b516807884e1d551f53ca (HEAD -> master)

Author: jam

Date: Sun Oct 7 13:38:00 2018 +0800

$ echo "first commit" | git commit-tree c3b8bb102afeca88037d5b5dd89ceeb0090eae9d

$ git log

可能想管理项目的版本,那末大伙儿应该做的第一件事情就说 我通过git init初始化。

在上述代码中,git hash-object命令将test.txt现有的内容压缩成二进制文件,并保存到Git中。该压缩文件叫做Git对象,保所处.git/objects目录中。

在这篇文章中,我将用有另八个多 例子来解释Git的运行过程,帮助你理解Git的工作原理。

如上述代码所示,.git/objects目录下又多出了有另八个多 子目录,何如想要你你这名子目录名是上述哈希值的前有另八个多 字符。在你你你这名子目录下有有另八个多 文件,文件名是上述哈希值中其余的38个字符。

接下来让大伙儿创建有另八个多 新的空文件test.txt。

针对每个文件执行上述有另八个多 步骤非常繁琐。全都Git提供了git add命令来比较复杂哪几个操作。

git status命令可以 输出更多可读的结果。

让大伙儿创建有另八个多 项目的目录,何如让进入该目录。

tree c3b8bb102afeca88037d5b5dd89ceeb0090eae9d

author jam 1538889134 +0800

committer jam 1538889134 +0800

commit c9053865e9dff393fd2f7a92a18f9bd7f2caa7fa

Author: jam

Date: Sun Oct 7 13:12:14 2018 +0800

$ git log --stat c9053865e9dff393fd2f7a92a18f9bd7f2caa7fa

$ echo "second commit" | git commit-tree 1552fd52bc14497c11313aa91547255c95728f37 -p c9053865e9dff393fd2f7a92a18f9bd7f2caa7fa

索引保存所处了变化的文件信息。等到修改完成,所有哪几个信息都会被写入版本的历史记录中,这合适生成有另八个多 当前项目的快照。

test.txt | 1 +

1 file changed, 1 insertion(+)

上述命令显示了.git子目录中的内容。

项目的历史记录由不一并间点的项目快照组成。Git可以 将项目恢复成任何有另八个多 快照。在Git中“快照”有有另八个多 专门的术语,即“提交”(commit)。全都生成快照也可以 称之为完成提交。

c90c5155ccd6661aed956510f5bd57828eec9ddb

$ git log

c9053865e9dff393fd2f7a92a18f9bd7f2caa7fa

$ echo 785f188674ef3c6ddc5b516807884e1d551f53ca > .git/refs/heads/master

让大伙儿再来看看文件内容。

git write-tree命令可以 根据当前目录行态生成有另八个多 Git对象。

可能你看一遍看该文件原始的文本内容,那末应该使用git cat-file。

上述代码输出的文件内容是某些二进制字符。你可能会问既然test.txt是空文件,又为啥会有哪几个内容呢?这是可能该二进制对象中还存储了某些元数据。

上述代码显示索引中不可以 有另八个多 新文件test.txt,该文件正等待图片图片图片写入版本的历史记录中。

$ git checkout c9053865e9dff393fd2f7a92a18f9bd7f2caa7fa

下列所有“快照”的引用指的全部都会提交。

大伙儿可以 通过你你你这名命令根据对象的文件名获取当前内容,并计算成SHA1 哈希(长度为40的字符串)。让大伙儿看看下列新生成的Git对象文件。

785f188674ef3c6ddc5b516807884e1d551f53ca

上述代码显示索引中不可以 有另八个多 test.txt文件,还显示了该文件的二进制对象名和访问该文件的权限。可能你知道该二进制对象名,就可以 查看.git/objects子目录中该文件的内容。

让大伙儿来看看该文件的内容。

$ git cat-file -p c9053865e9dff393fd2f7a92a18f9bd7f2caa7fa

1552fd52bc14497c11313aa91547255c95728f37

$ git show c9053865e9dff393fd2f7a92a18f9bd7f2caa7fa

$ git hash-object -w test.txt

当文件保存成二进制对象以前,你需要告诉Git哪个文件所处了变化。Git会在有另八个多 叫安“索引”(或阶段)的区域记录所有所处了变化的文件。何如让等到所有的变更都刚结速后,将索引中的哪几个文件一并写入正式的版本历史记录中。

原文发布时间为:2018-12-10

本文作者:机器学习算法与Python学习

本文来自云栖社区媒体媒体合作伙伴“ 机器学习算法与Python学习”,了解相关信息可以 关注“guodongwei1991”微信公众号

commit c9053865e9dff393fd2f7a92a18f9bd7f2caa7fa

Author: jam

Date: Sun Oct 7 13:12:14 2018 +0800

上述命令记录了文件名test.txt、二进制对象名(哈希值)以及索引中文件的访问权限。

$ git update-index test.txt

$ git write-tree

$ echo "hello world again" > test.txt

何如让把你你你这名文件再加到Git代码库中,你你你这名步将创建test.txt现有内容的有另八个多 副本。

接下来,保存现有的目录行态。在本文的前面大伙儿讨论了保存对象只会保存有另八个多 文件,无须会记录文件之间的目录行态。

上述命令合适针对当前项目中所有所处了变化的文件执行上述有另八个多 步骤。

你你你这名文件的内容可能改变了,全都你需要再次把它保存为Git对象。

首先,大伙儿需要设置用户名和邮件地址。在你保存快照的以前,Git需要记录是谁执行的提交。

尽管每天你都会用到Git,但全部都会可能搞不懂它的工作原理。为哪几个Git可以 管理版本?基本命令git add和git commit到底在干哪几个?

如上述代码所示,test.txt的哈希值可能随着文件内容的改变而所处了变化。一并还生成了新文件.git/objects/3b/18e512dba79e4c880dd08aeb37f8e728b8dad。现在想要看一遍你你你这名文件的内容了。

可能原文件为空,全都上述命令哪几个都那末显示。现在大伙儿往test.txt文件中写点东西。

$ git commit -m "first commit"

在上述代码中,目录行态保存成了二进制对象,而对象的名字是哈希值。它也保所处.git/objects目录中。