git 的一些笔记

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 “[email protected]”

添加别名配置
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 [email protected]{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 的一些笔记

时间: 2024-10-11 01:11:17

git 的一些笔记的相关文章

代码管理工具 --- git的学习笔记四《重新整理git(1)》

1.创建版本库 mkdir  创建目录 cd  地址,到该地址下 pwd 显示当前目录 1.创建目录 $ mkdir startGit $ cd startGit $ pwd 显示当前目录 或者cd到桌面,然后再创建目录 2.初始化版本库 $ git init 初始化仓库 提示信息:Initialized empty Git repository in /Users/xingzai/Desktop/startGit/.git/ 建立一个空的git仓库在/Users/xingzai/Desktop

GIT & GitHub 学习笔记

SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活, 干完后,需要把自己做完的活推送到中央服务器.集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网 速慢的话,就纳闷了. Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑 上.既然每个人的电脑都有一个完整的版本库

版本控制Git实际开发笔记

这里会把自己实际工作当中用到的git操作记录下来,供自己学习: ①新建分支: 在新版本要开发时,会基于最新版本新建一个分支,创建步骤如下: 新建本地分支[注意:这时只存在于本地,远程仓库还没有生成]: 然后切换到新建的本地分支: [说明]:以上两部操作可以合成一个命令:git checkout -b developer_V1.3.0 最后push到远程: 最后去网页中就能看到远程新建了这个分支了: ②删除远程分支: git branch -r -d origin/branch-namegit p

git的学习笔记整理

git学习较好的网址:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001373962845513aefd77a99f4145f0a2c7a7ca057e7570000 开源中国的git站点:http://git.oschina.net/oschina/git-osc/wikis/Home msysgit是Windows版的Git,从http://msysgit.github.

Git教程(笔记)

看了廖雪峰写的教程,由浅入深,花了三天的时间学完了,做一下学习笔记吧 Git简介 Linus创建Linux之后为方便管理Linux代码,自己用C写了这个分布式版本控制系统.2008年的时候GitHub网站上线,为开源项目免费提供Git存储. 集中式vs分布式: 集中式版本控制系统,版本库存放在中央服务器,每个人用的都是自己的电脑,用的时候先从服务器上获得新版本,工作完了再推送给中央服务器.缺点是必须联网使用,效率低. 分布式版本控制系统,没有中央服务器,每个人的电脑都是一个完整的版本库,工作的时

git常用操作笔记

这是我看了廖雪峰的git教程,写的笔记,仅作为一个学习的记录 一.大多数我们面临的是已经有一个进行中的项目了,我们只需克隆下来就可以了 1.安装git,安装完后,可输入git,回车,查看是否已安装 2.配置全局用户名     $git config --global user.name "Your Name" 配置邮箱地址        $git config --global user.email "[email protected]" 3.在一个空的文件夹里,右

廖雪峰Git教程学习笔记

廖雪峰git简单教程学习笔记 教程地址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b0001.可以这样设计目录,在d:\reposisoty\ 在这个目录下面有很多的仓库.mkdir learngitcd learngit>>git init          #这样就把learngit 初始化成了一个仓库>>git status        #说明当前仓库的状态并

Git的学习笔记

1.windows系统下载msysgit软件,一直next安装至完成,然后鼠标右键就能看到Git Bash here 和Git GUI here. 2.在自己建的目录下右击选中Git Bash here 点击,会出现git命令窗口,可以输入linux命令,然后输入git --version, 出现git的版本信息即代表安装成功了. 3.配置你的名字和邮箱(在github或者码云上面注册就有了) $ git config --global user.name "Your Name" $

git简明学习笔记(一)

什么是git git是一个分布式的文件版本关系系统 gitHub是一个应用了git版本管理系统的网站 git并非保存修改后的增量信息,而是保存整个项目的所有信息 git的每一个项目的副本都保存有整个项目的完整信息 在底层git使用hash来对每个文件进行校验和索引 git系统可以离线使用,这意味着git将在离线时保存提交文件大暂存区,待有网络时进行提交. git的一些基本逻辑 数据保存地址有三个 仓库:存放已经提交的所有项目文件 工作区:即进行项目编辑的地方 暂存区:离线时暂时保存正式提交数据的