git进阶

git原理简介

关于git原理的详细介绍,请参考git的官方中文教程。这里只是有选择性地粗略地介绍一部分。

工作区、暂存区与仓库

  1. 工作区是指你的工程文件夹中实际能看到的(除了了.git文件夹)以外的你能看到的部分,这些部分的文件是可供你随意增添,删除,修改的。

  2. 如果将你工作区已更改的部分提交到暂存区,那么将会生成这些已修改文件的快照。注意在提交到仓库之前,所有的已修改,添加,删除的文件都要提交到暂存区。

  3. 使用提交命令后,将会有一个新的版本生成。仓库实质上可以理解成是一个记录了所有版本的信息和具体内容的区域。

版本与分支

版本是一个对象

如果使用提交到仓库命令,将会生成一个提交对象,这就是生成一个版本的实质过程。这个提交对象储存了该版本的相关信息,以及上述提到的文件快照的位置。这个对象以提交前HEAD指向的对象为父对象(第一次提交时的提交对象没有父对象)(或者说指向提交前HEAD指向的对象)。

如果你多次提交的话,所有的提交对象就会形成“一条链”,或者是可以理解成一条时间线。如图所示:

多个版本的“时间线”

分支是一个指针

分支实时上是一个指向提交对象的一个指针,每一个仓库都会默认有一个master分支。
HEAD也是一个指针,但它其实并不是直接指向提交对象的,它是一个指向分支指针的指针。HEAD指向的分支所指的提交对象表示“当前的版本”。

分支与"HEAD"

git分支管理

分支的创建与合并

下面是一些基本命令

git branch <branchname>
//创建新分支,默认指向HEAD版本

git checkout <branchname>
//切换到某个分支(意思是HEAD指向该分支,暂存区清空,工作区切换到该分支指向的版本)

git checkout -b <branchname>
//创建新分支,并切换到该分支

git branch
//查看当前分支

git merge <branchname>
//将当前分支与指定的分支合并

这里重申一下commit要做的事情:
生成一个提交对象,指向上一个对象,之后HEAD指向的分支指向这个新的提交对象。最后清空暂存区。此时工作区内容也应与当前HEAD版本一致。
再重申一下回退(即切换版本)要做的事情:
将HEAD指向的分支指向某个提交对象,清空暂存区,并将工作区内容切换到与当前HEAD版本一致。
通过以上几点可以发现:
只要HEAD版本(意思是HEAD指向的分支所指的提交对象对应的版本)发生了改变。暂存区将会被清空,工作区也将会被切换到与HEAD版本一致的状态。

如果分别在不同的分支进行提交,将可能会出现多个提交对象指向同一个提交对象的情况。那么我们之前所提及的“一条链”的结构便不复存在了。而是一种“树形结构”。

分支树形结构

合并的详解(未完成)

合并的几种方式(未完成)

解决合并冲突(未完成)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 以下笔记主要参考gitgot,大致了解git使用和原理。 第一部分我们从个人的视角去研究如何用好Git,并且揭示G...
    carolwhite阅读 7,065评论 0 1
  • 简介 Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 Git 与常用的版本控制工具 ...
    闽越布衣阅读 7,760评论 0 18
  • 安装Git Git的下载地址:Git官网下载地址 Git本地仓库和命令 配置用户 下载完Git后,右键会有一个Gi...
    TokyoZ阅读 9,986评论 1 7
  • 一、基本概念: 注:对于git的分布式概念及其优点,不重复说明,自己百度或谷歌。本文中涉及到指令前面有$的,在cm...
    大厂offer阅读 5,326评论 0 3
  • Git 是目前最流行的分布式版本控制系统之一。 版本控制指的是,记录每次版本变更的内容和时间等细节,保留各版本之间...
    神齐阅读 5,292评论 0 7

友情链接更多精彩内容