zoukankan      html  css  js  c++  java
  • 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 “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 .会取消所有本地的修改..相当于用暂存区的所有文件直接覆盖本地文件,不给用户任何确认的机会.

  • 相关阅读:
    Json2JsonArray JsonArray2StringArray
    循环结构
    类型转换代码
    字符串的截取拼接
    循环语句,选择结构的相关代码
    Java代码2-运算符简单运用
    Java代码1
    集合框架
    接口
    继承多态
  • 原文地址:https://www.cnblogs.com/zhepama/p/3854490.html
Copyright © 2011-2022 走看看