首页 > 其他分享 >Git基础学习

Git基础学习

时间:2022-08-24 17:26:54浏览次数:73  
标签:文件 git 对象 基础 暂存区 学习 -- Git 分支

Git

  1. 安装与配置

    1. 安装好之后打开bash.exe配置用户名和邮箱

      1. 用户名

        git config --global user.name "LLY"

      2. 邮箱

        git config --global user.email [email protected]

      3. global可以换成system或不写

        global表示当前用户的配置

        system表示这台电脑中所有用户的配置

        不写表示当前项目的配置

    2. 查看配置

      1. 所有配置:git config --list
      2. 电脑配置:git config --system --list
      3. 用户配置:git config --global --list
  2. Git基本概念

    1. 区域
      1. 工作区:在工作区中做的所有更改不会被git管理
      2. 暂存区:把工作区中的修改放到暂存区
      3. 版本库:当暂存区中的内容觉得足够多了,把暂存区的内容提交到版本库
    2. 对象
      1. Git对象
      2. 树对象
      3. 提交对象
    3. .git目录

      git init:创建git项目

      也可以通过克隆来创建Git项目:git clone [url地址]

      在一个项目文件夹中打开Git Bash Here使用git init命令,然后会创建一个.git文件夹,表示这个项目被gti管理

      1. hooks:包含客户端或服务端的钩子脚本
      2. info:包含一个全局性排除文件
      3. objects:存储所有数据内容
      4. refs:存储指向数据(分支)的提交对象的指针
      5. config:项目特有的配置选项
      6. HEAD:文件指示目前被检测出的分支
      7. index:文件保存暂存区信息
    4. git对象

      Git的核心部分是一个简单的键值对数据库。可以向数据库插入任意类型的内容,它会返回一个键值,通过该键值可以在任意时刻再次检索这个内容

      1. 向数据库写入内容并返回对应键值

        命令:echo "test content" | git hash-object -w --stdin

        • -w:指示git hash-object命令存储数据对象;若不指定此选项,则该命令仅返回对应的键值。也就是说不指定这个选项的话不会向数据库里写内容,有了这个选项才会向git中写内容,内容保存在objects目录中的以hash码的前两位为名字的文件夹中。
        • --stdin:指示该命令从标准输入读取内容,若不指定,则必须在命令尾部给出待存储文件的路径
      2. 根据键值拉取数据

        命令:git cat-file -p hash码

        -p:可指示该命令自动判断内容的类型,并为我们显示格式友好的内容

        -t:把p换成t就是看存储内容的类型,结果为blob类型

        返回:对应文件的内容

      3. git对象存的是文件内容,不存文件名
    5. 看当前版本库中的内容

      命令:find .git/objects -type f

    6. 树对象

      树对象能解决文件名保存的问题,也允许 我们将多个文件组织 到一起。Git以Linux文件系统的方式存储内容。所有内容以树对象和数据对象(git对象)的形式存储。其中树对象就是目录项,数据对象(git对象)对应文件内容。一个树对象包含一条或多条记录(记录就是git对象。每条记录含有一个指向git对象或者子树对象的SHA-1指针,以及相应的模式、类型、文件名信息)。一个树对象也可以包含另一个树对象。

      1. 查看当前暂存区

        git ls-files -s

      2. 构建树对象

        利用update-index命令为一个文件的首个版本创建一个暂存区。并通过write-tree命令生成树对象。

        命令(该命令也同时为这个git对象取了一个名字):

        ​ git update-index --add --cacheinfo 10064 hash码 文件名

        文件模式为 100644,表示这是一个普通文件

        ​ 100755,表示一个可执行文件

        ​ 120000,表示一个符号链接

        --add选项:因为此前文件并不在暂存区中,首次需要--add

        --cacheinfo选项:因为要添加的文件位于Git数据库中,而不是位于当前目录下,所以需要--cacheinfo

        生成树对象(将当前暂存区的快照生成到版本库中):git write -tree

      3. git对象代表文件的一次次版本,树对象代表项目的一次次版本

    7. 提交对象

      命令:git commit-tree

      项目的每一个版本就是一个提交对象,提交对象包含一个树对象+作者+提交时间等注释信息

      提交对象是链式的,所以可以找到之前的版本

      本质上项目的快照是树对象

高层命令

  1. git add ./

    此命令看到的结果是将项目的修改添加到暂存区

    但工作过程是先将内容生成git对象存放到版本库,然后再将git对象拿出来放到暂存区

    跟踪新文件:git add 文件名

  2. git commit -m "自己写的注释内容"

    将暂存区的内容提交到版本库

  3. 工作目录下的文件状态

    对于git来说只有两种状态

    1. 已跟踪

      已跟踪又可以分为三种状态

      1. 已修改
      2. 已暂存
      3. 已提交
    2. 未跟踪

  4. 检查状态
    1. git status :查看当前工作空间中所有文件的状态
    2. git diff:查看当前哪些更新还没有暂存
    3. git diff --cached:有哪些更新已暂存起来准备好提交
    4. git diff --staged:与上条命令一样
  5. 忽略文件

    即不相把某些文件纳入版本控制中,如数据库文件,临时文件,设计文件等

    在项目主目录下建立“.gitignore”文件此文件中的内容有以下规则:

    1. 忽略空行或#开始的行
    2. *.txt 表示忽略所有.txt结尾的文件
    3. /temp 表示忽略/目录下的文件,但不忽略temph目录
    4. build/ 表示build目录下的所有文件
    5. doc/*.txt 表示忽略doc下的.txt结尾的文件,但不包括doc/server/arch.txt
  6. 分支
    1. 列出所有本地分支:git branch

    2. 列出所有远程分支:git branch -r

    3. 新建分支但依然停留在当前分支:git branch 分支名

    4. 新建分支并切换到该分支:git checkout -b 分支名

    5. 合并指定分支到当前分支:git merge 分支名

    6. 删除分支:git branch -d 分支名

    7. 切换到上一次分支:git checkout -

    8. 切换到指定分支:git checkout 分支名

    9. 将本地分支的内容推送到远程仓库:git push -u 远程仓库名 分支名

      -u的作用:第一次提交使用的-u参数,那么后边的提交可以直接使用git push 来提交,不需要指定远程仓库名和本地分支名

    10. 合并指定分支到当前分支:git merge 指定分支名

标签:文件,git,对象,基础,暂存区,学习,--,Git,分支
From: https://www.cnblogs.com/ccx-lly/p/16620880.html

相关文章

  • ArrayList学习
    核心源码packagejava.util;importjava.util.function.Consumer;importjava.util.function.Predicate;importjava.util.function.UnaryOperator;publiccla......
  • Android 学习笔记1
    Android学习笔记1需求:1.按钮响应、文本更新2.动态注册广播,实现接收系统分钟广播,跳转界面3.在子线程中实现倒计时1分钟4.将Activity与Service绑定、解绑,开关Service服......
  • [ROS学习]4.ROS命令行工具
    笔记参考:【ROS学习笔记】4.玩转小海龟——ROS命令行工具基于B站ROS公开课:【古月居】古月·ROS入门21讲基于Ubuntu20.04.1、Noetic版本1回顾第一个小海龟程序打开小海......
  • git rebase 撤销,回滚到对应commit
    gitrebase时由于没有看好文件内容,只解决有冲突的两个文件。以为就没事了,然后就提交了代码。最后发现我的代码没有了,经过查看后发现是被覆盖了。但问题是这是我个文件是......
  • Ladon代码学习
    代码地址https://github.com/k8gege/LadonGo按照Ladon的readme功能介绍来学习win环境需要先安装gcc https://blog.csdn.net/yvge669/article/details/124564622一,信息......
  • FastApi学习
    vscode配置插件coderunner在setting.json中关于python的修改为,因为我使用了虚拟环境,得让vscode找到python的路径"code-runner.executorMap":{"python":"......
  • git高级用法
    前言使用Git作为代码版本管理,早已是现在开发工程师必备的技能。可大多数工程师还是只会最基本的保存、拉取、推送,遇到一些commit管理的问题就束手无策,或者用一些不优雅......
  • JAVA基础--面向对象--2022年8月23日
    第一节 面向对象概述、注意事项1、类和对象是什么?类:共同特征的描述(设计图)对象:是真实存在的具体案例2、如何设计类publicclass......
  • 「学习笔记」不动点法求数列通项
    前言不动点法求数列通项是怎么回事呢?不动点法相信大家都很熟悉,但是不动点法求数列通项是怎么回事呢,下面就让小编带大家一起了解吧不动点法求数列通项,其实就是数列通项可......
  • HuGo博客的搭建以及上传到GitHub
    按照步骤来我用的是windows操作系统1.下载Githttps://git-scm.com/2.下载GuGohttps://github.com/gohugoio/hugo/releases往下拖,选择对应的系统下载3.配置HuGo的......