git查看分支记录_git原理

本文深入探讨了git的基础概念和命令,包括git分支的指针性质、git对象(blob, tree, commit)、git引用(HEAD, 标签, 远程引用)以及git的内部工作原理。通过示例解析了git add、commit、reset、revert等命令的运作机制,强调了git分支并非实体,而是指向commit的指针。同时,介绍了TortoiseGit的使用和git底层命令,帮助读者更好地理解git的工作流程。" 135760592,22015244,AI智能图片去水印:简单有效的方法,"['人工智能', '图像处理', '照片编辑']
摘要由CSDN通过智能技术生成

标准用法请参考git-scm。本文记录笔者对git的一些理解,如有错误,欢迎指正。
引用内容已用markdown记号标出。版权所有,转载请注明出处。
文章完成中

这是引用内容

First Edition:2021-01-27

文中的记号约定

<当前分支>:用尖括号包裹,需要被替换

软件环境

笔者将介绍 命令行,TortiseGit,VS中git的使用

git学习指引

更适合把git当作某种数据结构来理解,从底层理解git

git中的一些概念

git分支并不是一个实体,而是一个指针,分支只存放了指向某个commit的指针,不保存其他信息。在master分支创建新提交后,分支指针指向为新的commit。

HEAD表示当前指向的位置,master/main一般用于主分支。不要混淆两者概念

working-tree index lib
working-tree为工作目录,即可以直接操作
index,也称stage,git commit将当前index状态保存,即git commit不处理工作目录

git基本命令

  • add 添加文件到index
git add new.txt
  • commit 将当前index提交到Local Repository
git  commit  -m "<这里是commit的注释>"
git  commit  -m "<这里是commit的注释>" --allow-empty //使用此命令学习git分支
git  commit  -m "<这里是commit的注释>" --allow-empty-message -m "" //允许空注释
  • checkout 修改HEAD指针 底层修改 ./git/HEAD
git checkout <指定位置> //修改HEAD 指针到<指定位置>
  • switch 修改HEAD指针,使其指向某个分支而不是某个结点
git switch <分支> //切换到某个分支
//switch与checkout的区别:
//checkout功能更加底层,修改HEAD指针的内容,使其指向branch或者commit
//switch只能指向分支
  • branch 创建分支
git branch new_branch //新建分支new_branch
  • reset 修改当前分支的指针 底层修改文件 ./git/refs/head/<分支名>
git reset ad13f1 //修改当前分支的指针
//git reset与checkout的区别
//git reset不修改HEAD指针,修改当前分支指向的commit
//git checkout修改HEAD指针

git指令

git rebase
git revert
git reset
git checkout
git merge
git cherry-pick

git merge命令
当前工作再branch_master分支,此分支指向commitA,develop分支指向commitB,(AB字母仅供标识,没有其他含义)。使用指令git merge develop,创建一个新的commitC,commitC以commitA和commitB为父结点。再次强调,git的分支是一个指针,存放在./git/refs文件夹下。分支所包含的结点是以类似链表的方式的进行查找的,并不是线性记录在某个文件中。
git中删除分支并不会直接删除commit object,不过分支指针丢失了,难以进行查找,并且git有gc垃圾回收机制,会清理悬挂对象。(git误操作后恢复数据原理,分支指针被清除,对象并未清除,而且在./git/logs文件夹内有日志。) git fsck 命令验证数据库中对象的连通性和有效性。
git revert命令
当前master分支有commitA commitB commitC
使用git revert commitA命令生成commitD,commitD的父节点为commitC,commitD的内容与A一致,但并不破坏历史记录.
注:git对象是以链表的形式组织。链表上的结点不能自由移动,但可以对读取结点上的内容,创建新结点,这看起来像是回到了某次提交。
git reset命令
修改当前分支指向的结点(分支指针总是指向该分支的最后一个结点,或者说分支指针记录了该分支最后一个结点,checkout命令是移动HEAD指针)
当前master分支有commitA commitB commitC
git reset commitA后,如果没有分支线包含commitB,commitC,那么B、C不会显示在git log中(因为git log是动态搜索),B、C可能会被清除。
注:git使用链接式的数据结构。
git cherry-pick命令

git区域

这几个区域是使用概念上的区别。
git Working-Tree 即工作文件夹
git index index

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值