github 进阶说明

目录

  • github 进阶说明
    • 前言
    • 三个目录树
      • 重置 git reset
      • 增加路径的reset
      • 检出 checkout
      • 带路径的checkout
    • 仓库
      • 数据对象
    • 其他
    • 资料

github 进阶说明

前言

我们可以什么都不管,照搬命令来完成我们大部分git工作,但是如果想要进一步,就要深入理解git的实现原理,和底层机制。

三个目录树

  1. HEAD 仓库指针
  2. index file 暂存区
  3. Working Directory 工作目录

默认情况,头指针会指向当前分支,当前分支指向当前目录树。所谓目录树简而言之就是一个commit对象,保存了某个提交时刻的工作目录内容的镜像。而工作目录就是当前文件内容。

状态一:初始情况是三者相同。
状态二:当你编辑了工作目录下的内容,工作目录和暂存区就不同。git status会提示你git add相关文件。
状态三:git add 之后,暂存区和仓库又不相同了,git status 提示你git commit,当你git commit之后,回到状态一,仓库就增加了一个新的版本,当前分支指针移动到新版本之上。

周而复始。

重置 git reset

但总有需要重置的时候:

git reset移动当前分支指针(即间接改变HEAD)。

手段一:git reset --soft HEAD~移动HEAD指针到HEAD~,这时仓库和暂存区不同,暂存区和工作目录相同,即状态三。简而言之,就是“撤销”了上次的提交。

手段二:git reset --mixed HEAD~ 移动HEAD指针到HEAD~,并重置暂存区。这时仓库和暂存区相同,工作区和暂存区不同,即进入状态二。--mixed是默认参数。

手段三:git reset --hard HEAD~ 移动HEAD指针到HEAD~,并重置暂存区和工作区到当前HEAD版本。即状态一。这是一条危险操作,因为你可能会丢失当前正在编辑而没提交的所有内容。但这条命令也是真正完全的实现了跳跃版本,不会残留任何一点当前版本的信息。

增加路径的reset

reset可以增加路径,这时的表现就是重置某个文件而已。并不会改动HEAD指针

git reset -- file.txt 重置暂存区file.txt文件状态。简而言之,就是git add的反向操作。

你还能指定暂存区重置到哪个版本git reset 234b file.txt

检出 checkout

checkout和reset命令很相似,也是操控三个目录树。差别是checkout 改变HEAD本身,reset是改变当前被HEAD指向的分支。务必理解这个二重指针的结构。

比如HEAD 指向master,reset 会改变master,HEAD不变。而checkout 会直接改变HEAD,master不变。虽然表面现象上来说很多时候表现是差不多的,因为当前用户可能只会观察到三棵树的变化,而没有留意指针的变化。

git checkout develop 从master分支切换到develop分支,并重置工作区和暂存区,进入状态一。

带路径的checkout

类似带路径的reset,并不会改变HEAD,不同点它重置暂存区,同时也重置工作区。

git checkout -- file.txt 用当前HEAD指向的目录树中的file.txt镜像重置暂存区和工作区。

仓库

  1. 纯仓库。git init --bare 创建一个纯仓库,只是用来存储仓库数据而不是用来工作的。比如用来做服务器远端仓库,本地仓库的备份。
  2. 空仓库。git init 创建一个空仓库

仓库内容:ls -F1 .git

branches/      #分支
COMMIT_EDITMSG
COMMIT_EDITMSG.save
config      #设置
description  #GitWeb使用
FETCH_HEAD
gitk.cache
HEAD #头指针
hooks/ #钩子
index #暂存区
info/ #全局排除模式,类似.gitignore
logs/
objects/ #数据
ORIG_HEAD
refs/ #各种commit 指针

数据对象

  1. git hash-object 任何对象都可以用哈希值加入仓库索引
  2. git cat-file 用哈希值搜索仓库内对象
  3. git update-index --add --cachinfo 100644 更新暂存区对象
  4. git write-tree 将暂存区写入树对象
  5. git read-tree --prefix=dir 加入子树,前缀dir
  6. git commit-tree c03ca4 用树对象生成提交对象
  7. git log --stat 查看提交对象历史信息
  8. git fsck --full 查看没有引用的对象
  9. git gc 压缩对象库
  10. git count-objects -v 查看空间暂用统计
  11. git prune --expire now 立即清除所有不被引用的对象(因为试验,生成了错误的对象,但是要清理非常非常麻烦,最后靠这条命令成功清理了)
  12. git reflog expire --expire-unreachable=0 --all 清理操作记录,这是对象有可能被引用的地方

其他

  1. git config core.autocrlf true 自动转换换行格式。

资料

git社区参考书:http://gitbook.liuhui998.com/

转载于:https://www.cnblogs.com/Nobel/p/10550782.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/394761.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手把手教你 Spark 性能调优

0、背景 集群部分 spark 任务执行很慢,且经常出错,参数改来改去怎么都无法优化其性能和解决频繁随机报错的问题。 看了下任务的历史运行情况,平均时间 3h 左右,而且极其不稳定,偶尔还会报错: 1、优化思路 任…

pytorch线性回归代码_[PyTorch 学习笔记] 1.3 张量操作与线性回归

本章代码:https://github.com/zhangxiann/PyTorch_Practice/blob/master/lesson1/linear_regression.py张量的操作拼接torch.cat()torch.cat(tensors, dim0, outNone)功能:将张量按照 dim 维度进行拼接tensors: 张量序列dim: 要拼接的维度代码示例&#…

软考考前冲刺第十三章UML建模

1.如果一个对象发送了一个同步消息,那么它要等待对方对消息的应答,收到应答后才能继续自己的操作。而发送异步消息的对象不需要等待对方对消息的应答便可以继续自己的操作。 2.部署图描述了一个运行时的硬件结点,以及在这些结点上运行的软件组…

sqlalchemy_SQLAlchemy使ETL变得异常简单

sqlalchemyOne of the key aspects of any data science workflow is the sourcing, cleaning, and storing of raw data in a form that can be used upstream. This process is commonly referred to as “Extract-Transform-Load,” or ETL for short.任何数据科学工作流程的…

c语言枚举代替双switch,C语言 使用数组代替switch分支语句降低圈复杂度

#include typedef int(*CALCULATE_FUN)(int, int); //定义函数指针typedef struct tagStruct{CALCULATE_FUN fun_name; //结构体成员,存放函数char calc_flag; //结构体成员,存放符号}CALC_STRUCT;/* 加减乘除函数声明 */int fun_add(int x, int y);int …

基础DP(初级版)

本文主要内容为基础DP,内容来源为《算法导论》,总结不易,转载请注明出处。 后续会更新出kuanbin关于基础DP的题目...... 动态规划: 动态规划用于子问题重叠的情况,即不同的子问题具有相同的公共子子问题,在…

《UNIXLinux程序设计教程》一2.1 UNIX 输入输出基本概念

2.1 UNIX 输入输出基本概念 在任何一种操作系统中,程序开始读写一个文件的内容之前,必须首先在程序与文件之间建立连接或通信通道,这一过程称为打开文件。打开一个文件的目的可能是要读其中的数据,也可能是要往其中写入数据&…

python时间计算_日期天数差计算(Python)

描述 从json文件中读取两个时间数据(数据格式例如:2019.01.01,数据类型是字符串),并计算结果,打印出两个时间间隔了多少天。 输入/输出描述 输入描述 json文件名称datetime.json,格式如下&#…

c语言编常见算法,5个常见C语言算法

5个常见C语言算法十进制转换为二进制的递归程序字符串逆置的递归程序整数数位反序&#xff0c;例如12345->54321四舍五入程序(考虑正负数)二分法查找的递归函数#include#include#include//十进制转换为二进制的递归程序voidDecimalToBinary(int n){if(n<0){printf("…

利用Kinect将投影变得可直接用手操控

Finally 总算是到了这一天了&#xff01;假期里算法想不出来&#xff0c;或者被BUG折磨得死去活来的时候&#xff0c;总是YY着什么时候能心情愉快地坐在电脑前写一篇项目总结&#xff0c;今天总算是抽出时间来总结一下这神奇的几个月。 现在回过头来看&#xff0c;上学期退出AC…

my-medium.cnf_您的手机如何打开medium.com-我将让门卫和图书管理员解释。

my-medium.cnfby Andrea Zanin由Andrea Zanin 您的手机如何打开medium.com-我将让门卫和图书管理员解释。 (How your phone opens medium.com — I’ll let a doorman and a librarian explain.) Hey did you notice what just happened? You clicked a link, and now here y…

springboot自动配置的原理_SpringBoot自动配置原理

SpringBoot的启动入口就是一个非常简单的run方法&#xff0c;这个run方法会加载一个应用所需要的所有资源和配置&#xff0c;最后启动应用。通过查看run方法的源码&#xff0c;我们发现&#xff0c;run方法首先启动了一个监听器&#xff0c;然后创建了一个应用上下文Configurab…

Django first lesson 环境搭建

pycharm ide集成开发环境 &#xff08;提高开发效率&#xff09; 解释器/编译器编辑器调试环境虚拟机连接 设置VirtualBox端口 操作1 操作2 点击号添加&#xff0c;名称为SSH&#xff0c;其中主机端口为物理机的端口&#xff0c;这里设置为1234&#xff0c;子系统端口为虚拟机的…

《Drupal实战》——3.3 使用Views创建列表

3.3 使用Views创建列表 我们接着讲解Views的设置&#xff0c;首先做一个简单的实例。 3.3.1 添加内容类型“站内公告” 添加一个内容类型“站内公告”&#xff0c;属性配置如表3-1所示。 为该内容类型设置Pathauto的模式news/[node:nid]&#xff0c;并且我们在这里将节点类型…

c语言函数编正切余切运算,浅谈正切函数与余切函数的应用

九年义务教育三年制初级中学“数学”课本中&#xff0c;对正切函数和余切函数的定义是这样下的&#xff1a;在&#xff32;&#xff54;&#xff21;&#xff22;&#xff23;中&#xff0c;∠&#xff23;&#xff1d;&#xff19;&#xff10;&#xff0c;&#xff41;&#…

wget命令下载文件

wget -r -N -l -k http://192.168.99.81:8000/solrhome/ 命令格式&#xff1a; wget [参数列表] [目标软件、网页的网址] -V,–version 显示软件版本号然后退出&#xff1b; -h,–help显示软件帮助信息&#xff1b; -e,–executeCOMMAND 执行一个 “.wgetrc”命令 -o,–output…

idea mybatis generator插件_SpringBoot+MyBatis+Druid整合demo

最近自己写了一个SpringBootMybatis(generator)druid的demo1. mybatisgenerator逆向工程生成代码1. pom文件pom文件添加如下内容&#xff0c;引入generator插件org.mybatis.generator mybatis-generator-maven-plugin 1.3.5 mysql …

vr格式视频价格_如何以100美元的价格打造自己的VR耳机

vr格式视频价格by Maxime Coutte马克西姆库特(Maxime Coutte) 如何以100美元的价格打造自己的VR耳机 (How you can build your own VR headset for $100) My name is Maxime Peroumal. I’m 16 and I built my own VR headset with my best friends, Jonas Ceccon and Gabriel…

python_装饰器

# 装饰器形成的过程 : 最简单的装饰器 有返回值得 有一个参数 万能参数# 装饰器的作用# 原则 &#xff1a;开放封闭原则# 语法糖&#xff1a;装饰函数名# 装饰器的固定模式 import time # time.time() # 获取当前时间 # time.sleep() # 等待 # 装饰带参数的装饰器 def timer…

欧洲的数据中心与美国的数据中心如何区分?

人会想到这意味着&#xff0c;在欧洲和北美的数据中心的设计基本上不会有大的差异。不过&#xff0c;一些小的差异是确实存在的。您可能想知道为什么你需要了解欧洲和北美的数据中心之间的差异&#xff0c;这对你的公司有帮助吗?一个设计团队往往能从另一个设计团队那里学到东…