git config

git config存在三个地方 :
1./.git/config 项目级别
2.~/.gitconfig 用户级别
3./etc/gitconfig 系统级别

git config -e 查看项目级别的配置
git config -e --global 查看用户级别的配置
git config -e --system 查看系统级别的配置

添加git用户配置
git config user.name “test”
git config user.email “test@gmail.com”

添加别名配置
git config --global alias.st status
git config --global alias.ci commit

删除配置
git config --unset user.name

查看配置
git config user.name

-------------
git log 查看提交日志

git log --pretty=oneline 按行显示提交日志

工作区 暂存区stage 版本库

git diff 查看工作区与暂存区之间的差异
got diff HEAD 查看工作区与HEAD(当前版本库的头指针)进行比较
git diff master 查看工作区与某分支进行比较

git diff --cached 查看提交暂存区和版本库中文件的差异
git diff --staged 同上

git status 查看文件状态
git status -s 查看文件状态的精简格式
注意M的位置和颜色..如果M前有空格则是未add到暂存区.如果无空格已经add到暂存区.如果有两个MM代表之前提交过到暂存区,同时还有没有提交到暂存区的内容

当执行 git status 或者git diff 扫描工作区改动的时候 先根据.git/index文件中记录的时间戳,长度等信息判断工作区文件是否改变,如果工作区的文件时间戳或者长度改变了,需要打开文件读取文件内容与更改前的原始文件相比较判断文件内容是否被更改.若未改变则将该文件新的时间戳和长度记录到index文件中

git add执行时,暂存区的目录树将被更新,同时工作区修改的文件内容会被写到对象库中的一个新对象中.该对象的ID会被记录在暂存区的索引中

git commit 执行时,暂存区的目录树会写到对象库中,master分支会做相应的更新,即master最新指向的目录树就是刚刚写入的暂存区目录树

git reset HEAD 暂存区的目录树会被重写,被当前分支指向的目录树所替换

git rm --cached <file>会直接从暂存区删除文件,工作区不作出改变

git checkout . 或者git checkout -- <file>会用暂存区全部的文件或指定的文件替换工作区的文件.这个操作很危险,会清除工作区中未添加到暂存区的改动.

git checkout HEAD . git checkout HEAD <file> 会用HEAD指向的master分支中的全部或部分文件替换暂存区和工作区中的文件.极危险.会同时清除工作区中未提交的改动和清除暂存区中未提交的改动

.git/index 文件索引目录树,记录文件名和文件的状态信息
.git/objects 存储文件的内容
.git/refs 保存引用的命名空间其中heads目录下的引用又称为分支

git branch 查看当前的工作分支 * 表明当前分支

git log -l HEAD
git log -l master
git log -l refs/heads/master
上面三个返回值是一样的..

find .git -name HEAD -o -name master
.git/HEAD
.git/logs/HEAD
.git/log/refs/heads/master
.git/refs/heads/master

HEAD指向当前分支.
refs/heads/master 里面保存了最后一次提交的哈希值.
通过哈希值..可以找到 tree parent 的哈希值
git cat-file -p xxxxxxx

找到tree.能找到具体文件..
找到parent,能找到上一次提交.一直往前找.直到没有parent

git reset --hard HEAD^ 重置master到上一个提交.HEAD^代表上一次提交,会改变ref/heads/master中的commit哈希值到为上一次提交的哈希值.并改变工作区

这样使用会很危险,会彻底的丢弃历史.

如何恢复呢?
使用reflog查看日志文件.
git reflog show master | head -5
然后恢复到想要的历史
git reset --hard master@{1}

HEAD也是一个指针,可以指向分支或者任何一次commit

git checkout 会重写工作区

git checkout branch 迁出branch分支,更新HEAD以指向branch分支,以及用branch指向的树更新暂存区和工作区

git checkout 汇总工作区/暂存区和HEAD的差异
git checkout HEAD 同上
git checkout -- filename 用暂存区中filename文件来覆盖工作区中的filename文件.相当于取消上次执行git add filename以来的本地修改

git checkout branch --filename 维持HEAD指向不变.用branch所指向的提交中的filename替换暂存区和工作区相应的文件.注意会降暂存区和工作区中的filename直接覆盖.

git checkout -- . git checkout .会取消所有本地的修改..相当于用暂存区的所有文件直接覆盖本地文件,不给用户任何确认的机会.

git 的一些笔记的更多相关文章

  1. Git Pro读书笔记

    本文为Git Pro读书笔记,所有内容均来自Git Pro 1 Git基础 1.1 记录每次更新到仓库 在Git里,文件有4种状态,modified, staged, commited, 还有一种状态 ...

  2. git的学习笔记(二):git远程操作

    1.创建ssh key ssh-keygen -t rsa -C "your_email@example.com" 执行命令后会在用户的家目录生成.ssh的隐藏文件夹,文件夹里有公 ...

  3. git tag 常用笔记

    git tag 常用笔记 查看 tag 列出现有 tag git tag 列出 v1.4.2 相关的 tag git tag -l "v1.4.2" 查看指定 tag 的信息 gi ...

  4. git学习小结 (笔记)

    Modesty helps one to go forward, whereas conceit makes one lag behind. "虚心使人进步,骄傲使人落后" 注:本 ...

  5. HIT2019春软件构造->Git&Github学习笔记

    由于软件构造课程需要,学习使用git,以下作为学习笔记. 一.Git初始化及仓库创建和操作  1.基本信息设置(设置签名)  命令        项目级别/仓库级别:仅在当前本地库范围内有效 git ...

  6. git的学习笔记整理

    Git学习较好的网址:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001373 ...

  7. git常用操作笔记

    这是我看了廖雪峰的git教程,写的笔记,仅作为一个学习的记录 一.大多数我们面临的是已经有一个进行中的项目了,我们只需克隆下来就可以了 1.安装git,安装完后,可输入git,回车,查看是否已安装 2 ...

  8. Git源代码管理笔记

    很早之前也学过git但是没有详细的记录,这次是做个复习,巩固 若有不对的地方请您指出 目录 Git和SVN有什么区别? 什么是Git? github仓库 Star和Fork Pull request ...

  9. 版本控制工具Git的学习笔记

    在网上看到一个很不错的Git教程,学习后果断要做一下总结. 教程地址:http://www.liaoxuefeng.com/ 总结要点: 安装Git因为我个人的开发主要是基于windows环境下,所以 ...

  10. 代码管理工具 --- git的学习笔记二《git的工作原理》

    通过几个问题来学习代码管理工具之git 一.git是什么?为什么要用它?使用它的好处?它与svn的区别,在Mac上,比较好用的git图形界面客户端有 git 是分布式的代码管理工具,使用它是因为,它便 ...

随机推荐

  1. easyui datagrid 表格适应屏幕

    1.项目后台系统使用easyui,datagrid 的数据设置为自动适应屏幕,那么对于笔记本的话,就会显得有的小,可以通过设置datagrid属性,进行固定长度的设置 $('#gridTable'). ...

  2. OpenCV学习(2) OpenCV的配置

          下面我们在VS2010中编写一个简单的OpenCV程序,来看看如何在程序中使用OpenCV. 创建一个新的Win32 控制台程序,附加选项为空工程(empty project),并添加一个 ...

  3. Linux下读取RFID卡号(C串口编程)

    由于项目需要用到RFID.GPRS.摄像头等模块所以便看了一下,整理了一下学习思路,本篇先是整理一下串口读取RFID卡号的程序思路,后面还会更其他的 RFID模块: 本次采用的是125K的RFID读卡 ...

  4. 【云计算】Docker容器不能修改hosts文件怎么解决?

    参考资料: http://bbs.csdn.net/topics/390871429 http://tieba.baidu.com/p/4295556808 http://stackoverflow. ...

  5. windows 7 64bit安装apche php

    http://windows.php.net/download#php-5.6-ts-VC11-x64http://www.apachehaus.com/cgi-bin/download.plx 下载 ...

  6. jtemplate 为javascript前端html模版引擎

    最近的项目中用到了jtemplate, 它是客户端基于javascript的模板引擎,绑定的数据为json对象.以前我在页面上显示数据列表时最喜欢用Repeater控件了,因为它相对与其它几个服务端控 ...

  7. 编程算法 - 从1到n整数中1出现的次数 代码(C)

    从1到n整数中1出现的次数 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 输入一个整数n, 求从1到n这n个整数的十进制表示中1出现的次数. ...

  8. Warning: cast to/from pointer from/to integer of different size

    将int变量转为(void*)时出现错误 error: cast to pointer from integer of different size [-Werror=int-to-pointer-c ...

  9. mac中使用vi修改二进制文件

    mac中使用vi修改二进制文件 1.首先以二进制方式编辑这个文件vi -b datafile 2.使用xxd转换为16进制:%!xxd 文本看起来像这样: 0000000: 1f8b 0808 39d ...

  10. Zabbix Server和MPM(monitor for mysql)的高速部署

    1. 前言         zabbix作为开源免费的监控软件.其易于管理配置和可视化的视图.历史数据的定期维护.模板化的监控项目越来越受到广大IT运维人员的喜爱. 这里主要是总结了下Zabbix S ...