Git学习日记
Posted rotk2015
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git学习日记相关的知识,希望对你有一定的参考价值。
Chapter 1
- 版本控制(VCS):记录文件内容变化,便于未来查阅特定版本修订情况的系统。
- 集中式VCS:单一服务器集中保存版本信息。单点故障。
- 分布式VCS(distributed VCS):客户端不光保存最新的版本快照,还将整个版本库(包括历史记录)完整镜像下来。
- Git直接记录快照,而非文件差异。(联合上一条一起看,是否意味着Git只适用于小型项目?)
- Git索引文件用文件内容的哈希值(sha-1)。
- 3+1个区域:
- 工作区(working directory):在此处进行修改,modified;
- 暂存区(staging area):add 部分 工作区文件至此,staged;
- 本地仓库(local repository):commit 所有 暂存区文件至此,committed。
- 远程仓库(remote repository):push 本地数据库 至此。
- git本地获取帮助:git help [command]。
Chapter 2
-
搭建Git仓库的两种方式:
- git clone [url] (new_name),下载已有远程仓库到本地(默认名称为远程仓库名,可在命令后加参数修)。
- 将本地项目转换为Git仓库,git init,git add *,git commit -m “message”。
git init 仅仅初始化了一个Git仓库的结构,并未将项目中的文件插入到库中进行管理(即并没有被跟踪 “untracked” ,git看不到未被跟踪的文件)。
-
git add file_name,不管是新添加文件还是修改已有文件,都要先add至暂存区。
-
git status,查看本地目录自最后一次commit后状态的差异(是否有新增文件untracked,以及已有文件是否有新改动 modified but not stagd,以及暂存区状态staged but not commited)。
-
git diff,查看工作区与暂存区差异(具体到内容), git diff --stagd,查看暂存区已经保存的改动。
-
git log,查看提交历史。
-
git commit --amend,撤销最后一次提交,并提交当前暂存区内容。(提交的改错机会)
Chapter 3
-
Git 的分支,其实本质上仅仅是指向提交对象的可变指针。 Git 的默认分支名字是 master。 在多次提交操作之后,你其实已经有一个指向最后那个提交对象的分支(默认名master)。该分支会在每次提交时自动向前移动。
-
git branch new_branch,在当前所在的提交对象上创建一个新分支。
那么,Git 又是怎么知道当前在哪一个分支上呢? 也很简单,它有一个名为 HEAD 的特殊指针,指向当前所在的本地分支。
-
git checkout target_branch,切换当前所在的分支(HEAD会自动改变)。
请牢记:当你切换分支的时候,Git 会重置你的工作目录,使其看起来像回到了你在那个分支上最后一次提交的样子。 Git 会自动添加、删除、修改文件以确保此时你的工作目录和这个分支最后一次提交时的样子一模一样。
-
注意,所有提交都会提交到当前分支。
-
三方合并:
Chapter 10
-
Git 是一个内容寻址文件系统,这意味着,Git 的核心部分是一个简单的键值对数据库(key-value data store)。 你可以向 Git 仓库中插入任意类型的内容,它会返回一个唯一的键,通过该键可以在任意时刻再次取回该内容。
-
Git底层使用类似于UNIX文件系统的方式组织文件,即用树表示文件结构。树对象(即非叶子结点,tree)指向树对象或数据对象(即叶子结点,blob),数据对象存储的数据并非文件全部内容,而是文件的键值(地址)、以及其他相关信息。
而对于代表某个版本的最顶端树对象,使用提交对象管理提交的作者、时间、以及原因(message)。
最后,我们用某个名称简单的文件保存提交对象的sha-1值,便于索引。即所谓分支(branch)的本质。类似的,有第四种对象类型:标签对象,它相当于一个“永不移动”的指向某提交对象的指针。
-
承接Chapter 1第4条,同一文件的不同版本会记录在不同的数据对象中。(意思是在不引入额外的新文件的情况下,版本多了,数据库会变得越来越大;如果文件内容也不变化,只是迭代版本呢?Git对于未变化的文件直接记录其键值,不创建新数据对象)。
参考文献:
以上是关于Git学习日记的主要内容,如果未能解决你的问题,请参考以下文章