github 进阶说明
github 进阶说明
前言
我们可以什么都不管,照搬命令来完成我们大部分git工作,但是如果想要进一步,就要深入理解git的实现原理,和底层机制。
三个目录树
- HEAD 仓库指针
- index file 暂存区
- 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镜像重置暂存区和工作区。
仓库
- 纯仓库。
git init --bare创建一个纯仓库,只是用来存储仓库数据而不是用来工作的。比如用来做服务器远端仓库,本地仓库的备份。 - 空仓库。
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 指针
数据对象
git hash-object任何对象都可以用哈希值加入仓库索引git cat-file用哈希值搜索仓库内对象git update-index --add --cachinfo 100644更新暂存区对象git write-tree将暂存区写入树对象git read-tree --prefix=dir加入子树,前缀dirgit commit-tree c03ca4用树对象生成提交对象git log --stat查看提交对象历史信息git fsck --full查看没有引用的对象git gc压缩对象库git count-objects -v查看空间暂用统计git prune --expire now立即清除所有不被引用的对象(因为试验,生成了错误的对象,但是要清理非常非常麻烦,最后靠这条命令成功清理了)git reflog expire --expire-unreachable=0 --all清理操作记录,这是对象有可能被引用的地方
其他
git config core.autocrlf true自动转换换行格式。
资料
git社区参考书:http://gitbook.liuhui998.com/
github 进阶说明的更多相关文章
- GitHub进阶之利用Git远程仓库篇
#在上一篇文章,相信大家对GitHub已经有了一个基础的理解 接下来我们来学习一下如何利用git来远程仓库 一,git是什么 git:一个免费的开源版本控制软件 用途:利用Git管理GitHub上的代 ...
- 搜刮一些开源项目的APP
iOS完整App资源收集 <iOS完整app资源收集> <GitHub 上有哪些完整的 iOS-App 源码值得参考?> <GitHub 上有哪些完整的 iOS-App ...
- github+hexo搭建自己的博客网站(六)进阶配置(搜索引擎收录,优化你的url)
详细的可以查看hexo博客的演示:https://saucxs.github.io/ 绑定了域名: http://www.chengxinsong.cn hexo+github博客网站源码(可以clo ...
- 服务端技术进阶(八)GitHub入门篇
服务端技术进阶(八)GitHub入门篇 前言 在投递简历的过程中,发现有的公司会要求填写自己的GitHub地址,而自己却还没有GitHub帐号,准确点说是自己还不太会使用GitHub.(貌似开源社区中 ...
- 使用Hexo+Github搭建属于自己的博客(进阶)
主题的配置:这里以NexT主题作为题材 1.安装NexT,在其文件夹中鼠标右键,点击Git Base Here.输入命令:git clone https://github.com/iissnan/he ...
- 从0开始学习 GITHUB 系列之「GIT 进阶」【转】
本文转载自:http://stormzhang.com/github/2016/06/16/learn-github-from-zero5/ 版权声明:本文为 stormzhang 原创文章,可以随意 ...
- 转 从红帽、GitHub和Docker看开源商业模式的进阶
从红帽.GitHub和Docker看开源商业模式的进阶 发表于2014-12-16 10:26| 7594次阅读| 来源http://stratechery.com/| 0 条评论| 作者Ben Th ...
- 从0开始学习 GitHub 系列之「05.Git 进阶」
关于 Git 相信大家看了之前一系列的文章已经初步会使用了, 但是关于Git还有很多知识与技巧是你不知道的,今天就来给大家介绍下一些 Git 进阶的知识. 1. 用户名和邮箱 我们知道我们进行的每一次 ...
- OkHttp使用进阶 译自OkHttp Github官方教程
版权声明: 欢迎转载,但请保留文章原始出处 作者:GavinCT 出处:http://www.cnblogs.com/ct2011/p/3997368.html 没有使用过OkHttp的,可以先看Ok ...
随机推荐
- 几张图帮你理解 docker 基本原理及快速入门
写的非常好的一篇文章,不知道为什么被删除了. 利用Google快照,做个存档. 快照地址:地址 作者地址:青牛 什么是docker Docker 是一个开源项目,诞生于 2013 年初,最初是 do ...
- 前端面试题总结二(js原型继承)
今天这篇文章整理了JS原型和继承的一些知识点,面试的时候 基!本!都!会!问!还不快认真阅读下文,看看你还有哪些知识点需要掌握吧~ 1.原型链 基本思想:利用原型让一个引用类型继承另外一个引用类型的 ...
- Spark2.1.0——运行环境准备
学习一个工具的最好途径,就是使用它.这就好比<极品飞车>玩得好的同学,未必真的会开车,要学习车的驾驶技能,就必须用手触摸方向盘.用脚感受刹车与油门的力道.在IT领域,在深入了解一个系统的原 ...
- box-shadow 详解及示例
box-shadow [bɑks] - [ˈʃædoʊ] 英文示意: box:盒,包厢 shadow:阴影,渐变 定义: box-shadow: none | <shadow> ...
- 如何用VBS编写一个简单的恶搞脚本
windows系统的电脑, 首先右击桌面,选择新建-文本文档,在桌面上新建一个文本文档: 随后打开计算机或者是我的电脑,点击其中的组织(xp系统多为工具),选择下面的文件夹和搜索选项 ...
- 排序1,2......n的无序数组,时间复杂度为o(n),空间复杂度为o(1)
#include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _T ...
- 【状压dp】Bzoj1231 [Usaco2008 Nov]mixup2 混乱的奶牛
Description 混乱的奶牛 [Don Piele, 2007] Farmer John的N(4 <= N <= 16)头奶牛中的每一头都有一个唯一的编号S_i (1 <= S ...
- Poi2010 Monotonicity 2
树状数组优化dp 可以证明最优解一定是通过之前的最优转移过来的,所以每一个点只需要保存以该节点为结尾的最长长度即可 对于不同符号,等于号维护数组,大于小于维护树状数组 #include<cstd ...
- BZOJ_3110_[Zjoi2013]K大数查询_整体二分+树状数组
BZOJ_3110_[Zjoi2013]K大数查询_整体二分+树状数组 Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位 ...
- BZOJ_4870_[Shoi2017]组合数问题_矩阵乘法
BZOJ_4870_[Shoi2017]组合数问题_矩阵乘法 Description Input 第一行有四个整数 n, p, k, r,所有整数含义见问题描述. 1 ≤ n ≤ 10^9, 0 ≤ ...