git 的个人理解

所有内容均为自己理解的,可能会有些错误或偏差,欢迎指正

什么是git

分布式的版本控制系统,即每个人本地都是一个完整的版本库。git主要是对文件的修改进行跟踪记录,通过提交(commit)将这些修改“打包”放入本地仓库。

git三大区域和一个指针

git中的大部分的指令都是围绕这几个概念展开的,只要明白这些基本概念才能理解其他命令都是这做了什么

工作目录(working directory)

我们直接修改的文件,展现给我们看到的文件就是工作目录

暂存区(index/stage)

我们将工作目录的一些修改先添加(add)到一个固定区域,这个区域就是暂存区

仓库(repository)

将暂存区修改的数据一起“打包”成一个提交(commit)后就会存放到仓库里

头指针(HEAD)

每次提交都会生成一个hash值(以下统一用“版本号"代称这hash值),每个版本号的生成都是基于一个父版本号的(特殊情况除外),而HEAD 就是指向这个父版本号的,所以每次提交都会与HEAD指向的版本号对比,如果有冲突就会让处理冲突

版本号与HEAD

正常情况下HEAD 是指向当前分支的,而当前分支又指向当前分支最后的版本号,所以HEAD最终总是指向版本号的,当HEAD没有通过分支指向版本号时有一个特殊的叫法”头指针分离“(detached HEAD)

git常用命令

git add

将工作目录的修改添加到暂存区,这里的修改走向是从工作目录 ——>暂存区

git commit

将暂存里的修改提交至版本库,这里的修改被”打包“生成一个版本号并存入仓库,且HEAD指向刚刚生成的版本号,如果git add 是将工作目录的所以修改都添加到暂存区的话,此时工作目录,暂存区,仓库数据一致

git reset

reset有三类指令
git reset --soft [版本号] HEAD 指向该版本号,影响在提交时是基于该版本号为父版本的
git reset [版本号] HEAD 指向该版本号,且暂存区和该版本号一致
git reset --hard [版本号] HEAD 指向该版本号,且暂存区和工作目录与该版本号内容一致

git checkout

checkout我个人认为翻译称检出很合适,检出什么,从哪里检出,检出到哪里去,检出的目的地总是工作目录,但是从哪里检出,可以是暂存区也可以是仓库。

  • 检出某个版本号
    git checkout [分支名] 将HEAD指向该分支(即最终指向该分支的最后一个版本号),并将工作目录和暂存区切换到该版本
    git checkout [版本号] 和切换到分支类似, 但是由于直接指向版本号,本次修改的并提交的内容不隶属与任何分支,如何再切换分支,该版本号会在以后被清理掉。
  • 检出某个文件
    git checkout [filename] 此处filename为文件全路径,这时是从暂存区检出文件,工作目录的该文件内容会重置成和暂存区一样,用途,当工作目录修改内容无满意需要重置成和暂存区一致时使用
    git checkout [版本号] filename 该版本下的文件会被检出放入工作目录和暂存区,原工作目录和暂存区的内容会被替换
git stash

git stash 将工作目录内的修改内容暂时存放(存储结构是栈)
git stash pop取出最后一次的存储内容,此内容会从存储了删除(弹栈)
git stash apply 使用最后一次存储内容,此内容不会在存储内删除
git stash list 查看存储列表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值