git操作初始化配置 git对象 tree对象 commit对象 git各种命令

git

git初始化配置
$ git config --global user.name "name"
$ git config --global user.email [email protected]
	--system 所有用户  系统
	--global 用户目录下的 用户
		无  当前项目

初始化仓库

git init
git目录
hooks 目录包含客户端或服务端的钩子脚本;
info 包含一个全局性排除文件
logs 保存日志信息
objects 目录存储所有数据内容;
refs 目录存储指向数据的提交对象的指针(分支)
config 文件包含项目特有的配置选项
description 用来显示对仓库的描述信息
HEAD 文件指示目前被检出的分支
index 文件保存暂存区信息
 git 对象

底层命令(少用)

linux命令
	clear :清除屏幕
	echo 'test content':往控制台输出信息 echo 'test content' > test.txt
	ll :将当前目录下的 子文件&子目录平铺在控制台
	find 目录名: 将对应目录下的子孙文件&子孙目录平铺在控制台
	find 目录名 -type f :将对应目录下的文件平铺在控制台
	rm 文件名 : 删除文件
	mv 源文件 重命名文件: 重命名
	cat 文件的 url : 查看对应文件的内容
	vim 文件的 url(在英文模式下)
	按 i 进插入模式 进行文件的编辑
	按 esc 键&按:键 进行命令的执行
	q! 强制退出(不保存)
	wq 保存退出
	set nu 设置行号
git对象
git命令
向数据库写入内容 并返回对应键值
    git hash-object -w fileUrl : 生成一个key(hash值):val(压缩后的文件内容)
    键值对存到.git/objects
    git hash-object 文件路径
    返回对应的键值

查看 Git 是如何存储数据的
	find .git/objects -type f

	根据键值拉取数据
	git cat-file -p +(hash值)
	git cat-file -t
	利用 cat-file -t 命令,可以让 Git 告诉我们其内部存储的任何对象类型(blob)
tree对象 快照
    git update-index --add --cacheinfo 100644 hash test.txt : 

    往暂存区添加一条记录(让git对象 对应 上文件名)存到.git/index

    git write-tree : 生成树对象存到.git/objects

    git ls-files -s    查看暂存区
commit对象 提供注释 版本
    echo 'first commit' | git commit-tree treehash : 生成一个提交对象存到.git/objects

对以上对象的查询
git cat-file -p hash : 拿对应对象的内容
git cat-file -t hash : 拿对应对象的类型

查看暂存区

git ls-files -s        

高层命令(要用的)

C(新增)

在工作目录中新增文件
git status 查看状态
git add ./ (先将工作目录的修改做成git 对象 放到版本库 然后在放到暂存区)
git commit -m "注释"    

U(修改)

在工作目录中修改文件
git status  查看状态
git add ./ (先将工作目录的修改做成git 对象 放到版本库 然后在放到暂存区 每一个文件的修改都对应一个 git对象)
git commit -m "注释"     

D(删除 & 重命名)

git rm 要删除的文件 git mv 老文件 新文件
git status git status
git commit -m “注释” git commit -m “注释”

R(查询)

git status : 查看工作目录中文件的状态(已跟踪(已提交 已暂存 已修改) 未跟踪)
git diff : 查看未暂存的修改
git diff --cache : 查看未提交的暂存
git log --oneline : 查看提交记录
查看项目分叉历史
git log --oneline --decorate --graph --all

        配置别名
        git config --global alias.lol "log --oneline --decorate --graph --all"

分支

分支的本质其实就是一个提交对象!!!
HEAD: 
    是一个指针 它默认指向master分支 切换分支时其实就是让HEAD指向不同的分支
    每次有新的提交时 HEAD都会带着当前指向的分支 一起往前移动
git  log --oneline --decorate --graph --all : 查看整个项目的分支图  
git branch : 查看分支列表
git branch -v: 查看分支指向的最新的提交
git branch name : 在当前提交对象上创建新的分支 
git branch name commithash: 在指定的提交对象上创建新的分支
git checkout name :     切换分支
git branch -d name : 删除空的分支 删除已经被合并的分支
git branch -D name : 强制删除分支 

git操作最基本的流程

    创建工作目录 对工作目录进行修改
    git add ./
        git hash-object -w 文件名(修改了多少个工作目录中的文件 此命令就要被执行多少次)
        git update-index ...
    git commit -m "注释内容"
        git write-tree
        git commit-tree

切换分支

最佳实践: 每次切换分支前 当前分支一定得是干净的(已提交状态)
坑: 
    在切换分支时 如果当前分支上有未暂存的修改(第一次) 或者 有未提交的暂存(第一次)
       分支可以切换成功  但是这种操作可能会污染其他分支
动三个地方
    HEAD
    暂存区
    工作目录

Git存储

        git stash 命令会将未完成的修改保存到一个栈上,而你
		可以在任何时候重新应用这些改动(git stash apply)
		git stash list:查看存储

		git stash apply stash@{2}
		如果不指定一个储藏, Git 认为指定的是最近的储藏
		git stash drop 加上将要移除的储藏的名字来移除它

		git stash pop 来应用储藏然后立即从栈上扔掉它

后悔药(撤回操作)

工作区
    如何撤回自己在工作目录中的修改 : git checkout --filename
暂存区
    如何何撤回自己的暂存  : git reset HEAD filename
版本库              
    如何撤回自己的提交    : git commit --amend
        1.注释写错了,重新给用户一次机会改注释

重置reset

git log:  

git reflog : 主要是HEAD有变化 那么git reflog机会记录下来
三部曲
    第一部: git rest --soft HEAD~  (--amend)  
        只动HEAD (带着分支一起移动)      
    第二部: git reset [--mixed]   HEAD~ 
        动HEAD   (带着分支一起移动)  
        动了暂存区
    第三部:  git reset --hard  HEAD~   
         动HEAD   (带着分支一起移动)  
         动了暂存区
         动了工作目录E:\前端\Vue\day6\笔记.txt

checkout

git  checkout commithash   &   git reset --hard commithash         
    1.  checkout只动HEAD    --hard动HEAD而且带着分支一起走
    2.  checkout对工作目录是安全的   --hard是强制覆盖工作目录


git checkout  commithash
git checkout --filename  
      相比于git reset --hard  commitHash --filename  
      第一  第二步都没做
      只会动了工作目录
git checkout  commithash      
      将会跳过第 1 步 
      更新暂存区 E:\前端\Vue\day6\笔记.txt
      更新工作目录   

路径reset

git reset HEAD filename     (reset 将会跳过第 1 步)    
    动了暂存区       

你可能感兴趣的:(git,前端,git)