git head详解_git基础教程(一)

本文介绍了Git作为版本控制系统的发展历程,从集中式到分布式的优势,并详细讲解了Git的基本操作,如初始化仓库、暂存区、提交历史、文件重命名、分支管理和查看版本历史。此外,还解释了Git中的关键概念,如HEAD、commit、blob和tree对象之间的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

4ec864c153b5d32e962477cada32acfa.png

图片链接

1.git基础

1.1 VCS出现之前

  • 用目录拷贝区别不同版本
  • 公共文件容易被覆盖
  • 成员沟通成本高,代码集成效率低下

1.2 集中式VCS

  • 有一个集中的那么版本管理服务器
  • 具备文件版本管理和分支管理的能力
  • 集成效率有明显的提高
  • 客户端必须时刻和服务器相连

1bc578dd89f814d1747384c52eb5b5c8.png

1.3 分布式VCS

  • 服务端和客户端都有完整的版本库
  • 脱离服务端,客户端照样可以去管理版本
  • 查看历史和版本比较等多数操作,都不需要访问服务器,比集中式VCS更能提高版本管理效率

b47d95ecdf8ce11d886078453530be43.png

1.4安装git

  • 官方文档请点击

df5750256907974b8e3ebb5ddeb09564.png
  • linux安装步骤

50a4b5886691ee4f4a9e8ff3be30aaa7.png
  • windows安装步骤

7463889f733cdad59f2f3d46bd3378ab.png
  • 查看是否安装成功
    git --version

1dc8cf5b9ff9fe851cc1d9c72a7bcb63.png

5107b166fbac1dfe391a6061d6ed46d3.png

1.5 git最小配置

  • 配置user信息 配置user.name和user.email
#目的是为了记录每次的变更,以便秋后算账
#如果忘记设置,后期会提示进行这个设置
git config --global user.name 'yuzhou'
git config --global user.email 'yuzhou3996@gmail.com'

#git config --global 表示对当前用户的所有仓库有效(常用)
#git config --local 表示只对某个仓库有效(常用)
#git config --system 表示对系统所有登录的账户有效(不常用)
#local的优先级高于global


#显示config的配置,加上 --list
git config --local --list 
#想查看那个信息
git config --local user.name

52c969c0f01745eff5f63ef68c7287f2.png

e10bcf7db200e2d6791e6a112082e9f1.png

1.6 建git仓库

  • 两种场景 1.把已有的项目代码纳入git管理
    cd 项目代码所在的文件夹 git init2.新建的项目直接用git管理
    cd 某个文件夹 git init your_project #会在当前路径下创建和项目名称同名的文件夹 cd your_project

24f5d1ee4f20d374208e9aacc8f6ca7a.png

5340357d20d7fb3b7195221f4e9ca5d4.png

1.7 git暂存区概念

4757b17b83727bd0a878f3f842579371.png
  • 相关命令#1.查看当前管理状态的命令 git status

fb4389bc05d0de29e0d48430f42a8ec8.png

#2.将文件提交到暂存区 git add 文件/文件夹 git -u 表示将git已经管理过的文件提交到暂存区

689fa9df7fed372dbc4c82d332438dc1.png

#3.向仓库进行提交 git commit git -m '此次提交的注释' git -am '此次提交的注释' #表示工作区的直接提交到版本库

45eeb54ea89bfb593ec6ec6027a2cd6f.png

#4.查看相关提交日志信息 git log

6e2c4020e9d607327119c6a44aa5aee0.png

1.8 重命名文件

  • 如果直接对源文件进行重命名

9130979948b074f837e165843fed8139.png
  • 提示我们需要将git仓库之前被管理的read进行删除#删除仓库的文件 git rm 旧文件名 git add 新文件名

62ec683261e11c2b84cfaf9b2f1a70c2.png
  • 但是这样步骤繁琐#用一条命令完成对以上的替代 git mv 旧文件名 新文件名

1.9 查看git的版本历史

  • 命令行方式git log --oneline #简洁的查看git的变更历史 git log -n4 --oneline #简洁的查看git最近4次的变更历史 git log --all 列出所有分支对应的版本信息 git log --all --graph 图形化的方式列出所有分支对应的版本信息
  • 图形界面的方式命令行下输入 gitk 命令

c062344f54c49fd6d3bb7233aaa32a35.png

1.10 .git目录详解

4ad66f5f71fa8a4a8d08f0947a649c16.png
git checkout 分支名称 #表示切换到新分支
git checkout -b 分支名称 #表示创建分支并切换到此分支
git branch 分支名称 #表示创建新分支
  • HEAD文件 表示当前处于哪个分支,指向refs文件夹下的具体分支

2544ccdebb32287fa40053f35a735403.png
  • config文件 包含用户名以及邮箱

80a82a63a75c410eb26eadee5afeafcd.png
  • refs文件夹 tags表示标签 heads表示所有分支(相当于一个独立的开发空间)

c684f708ff33a7523fcf54e9ec88630a.png
  • objects文件夹

e946675bdc86c1fa3a220e85b1fad710.png

其中的文件夹名称与其下的文件名称共同组成一个哈希值 这个哈希值是一个 tree 对象(commit 也属于一个对象) 这个 tree 里面存储了我们源文件以及源文件对应的哈希值 查看 tree 的内容再次发现一个新的对象 blob(文件)
三种对象 blob commit tree

1.11 commit blob tree三个对象的关系

e380fabc04eb718e9a07e21352297083.png
  • 一个commit对应一个tree
  • 每次提交的一个commit相当于提交了一个文件夹以及一堆相关信息
  • 一个tree算作一个文件夹
  • tree下面还可以包含tree
  • 不同文件名的相同内容文件只算一个blob

1.12 分离头指针

木听懂

1.13 HEAD 与 branch

9fb7ed69ff2dc297b85cfc78cb502dd1.png
#以下所指的哈希值不用全部复制,前面几位即可,只要能保证唯一性
git cat-file -t 哈希值 #查看这个哈希值指代的类型
git cat-file -p 哈希值 #查看这个哈希值指代的内容
git diff 哈希值 哈希值 #比较两次commit的不同

da945daedc699cb8e626831e4e87f646.png
git diff HEAD HEAD^1 
#表示对比上一次commit与上一次commit的父亲的差异
HEAD^1^1 #代表上两次
HEAD^^ #代表上两次
HEAD~2 #代表上两次

了解更多技术文章,欢迎关注我的个人公众号

57ee332af2a5a5b3a89b41af9dc14051.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值