Git概述

git的原理是存储元数据(key-value形式)
每次提交代码以后,git就会将当前内容存储到类似hashmap的数据结构中
存储命令:git hash-object -w “文件名”
查看hamp值:git cat-ile -p “key”

git提交文件流程图:

git关联多个仓库

一个项目可以关联多个远程仓库,可以用来做备份功能*

Git 命令

初始化一个项目

git init '项目名字' ->example: git init 'study-git-bak'

关联远程项目

git remote add origin 远程仓库地址
例如:git remote add origin https://gitee.com/xxxxx/study-git.git

在这里插入代码片 添加文件123.txt,然后git status 查看文件状态

git status

文件是红色,说明还没提交到本地仓库

添加文件到本地暂存区(local)

git add 文件名 -> example:git add 123.txt  //添加单个文件
git add -A //添加所有文件到本地暂区

此时文件变成绿色

从本地暂存区撤销暂存

git rm --cached file example:git rm --cached 123.txt
git rm --cached 文件夹 -r //取消文件夹下所有暂存

提交到本地仓库

git commit fileName -m 'frist commit'  //提交指定文件
git commit -m 'first commit'  //添加所有文件

关联远程仓库

git remote add origin '仓库地址' //example:git remote add origin https://gitee.com/xxxxx/study-git.git

推送代码到远程仓库地址

git push origin master

如果出现如下错误:

按照提示执行命令就好了

git push --set-upstream origin master

注:如果还出现其他错误参考:https://blog.csdn.net/qq_45893999/article/details/106273214
强制拉取远程代码:(需要先提交本地代码到本地仓库)

git pull --rebase origin master

分支管理

查看本地/远程分支

git branch
git branch -a  //能看见远程分支,不带最后一次提交信息
git branch -avv //能看见远程分支,带提交信息

#### 切换分支

git checkout remotes/origin/master

创建分支

1)基于本地分支创建新分支

git branch <新分支> example:git branch test

2)基于远程分支创建分支

git branch <新分支名> <远程分支> example:git branch test origin/master

3)基于提交创建分支

git branch <新分支名> example: git branch forCommit e76caa3d6b3e84c43fab3abb81a91a71fdba1990

其实创建分支都是基于提交来创建的

删除分支

git branch -d <分支名1> <分支名2>

合并分支

git merge <需要合并过来的分支>

解决冲突

修改保留一个,然后重新add、commit

远程仓库

关联远程仓库

git remote add <新远程名> <新仓库地址> example:git remote add origin2 https://gitee.com/xxxxx/git-study-bak.git

提交到新关联的远程仓库:origin2 的master 分支,下面是这种方式:

git push --set-upstream origin2 master (会改变关联的远程仓库)
git push origin2/git push origin (推送到指定的远程仓库,不会改变默认关联的远程仓库)

注意:如果执行的是上面命令1,此时关联的远程仓库已发生改变, 默认提交到origin2

删除关联的远程仓库

git remote remove <远程仓库名> example:git remote remove origin2

Tag管理

tag和分支概念差不多,只不过它是一个只读的,通常用来做版本(里程碑)

新建tag

git tag <新tag名> example:git tag tag1

基于某个分支建tag

git tag <新tag名> <某个分支> example:git tag tag1 test

基于某个提交简历tag

git tag <新tag名> fddad46fa753ae34b2a6bcd3ee65a23c9dd4a3b5

删除tag

git tag -d tag1

Log管理

查看详细内容

git log

查看简洁内容

git log --oneline

分支对比

git log test..master (查看master有哪些提交没有提交到test分支)

查看提交网络

查看提交详细

git show //查看当前分支最后一次详细提交
git show master //查看某个分支最后一次详细提交
git show a5d34c5 //查看某次提交详细

Git底层原理

底层原理就是像map一样存到hash表里面,key是hash值,value是文件内容

回滚,就是把某一次存储的内容,写到新的文件中,如下,把第一次存储的内容写到文件中

git add 的原理就是将数据存到hash表中,hash的数据存储在 .git/object目录下

树对象(能看见该次提交具体修改的文件)

根对象对应着文件,使用git cat-file -p 45a4fb75db8可以查看文件对应的历史版本

提交原理,新提交文件的上级跟对象hash值会变,同级和下级的不变。相当于新修改的对象变了,那么也影响上级变了,下级和同级不受影响,所以下级和同级文件的hash值不会变,切换分支的时候,首先会比较不同点,如果文件对应的hash值一样,那么证明这个文件没有修改过,不需要更新,仅仅需要更新hash值变化的文件,这是git快的一个原因。

跟踪两次提交的树对象,可以发现每次提交都记录了当时版本所有文件的快照。注意看,如果当次提交,该文件没有任何修改,那么每次提交时该文件hash值还是一样的!

分支原理

分支保存在.git/refs/heads目录下,分支和tag的原理就是指针指向指向某个提交纪录

新建分支就是拷贝一份原分支的hash值到新分支文件中

附工作总结常用git命令

暂存命令

git stash save message    /暂存当前修改
git stash list /查看当前所有暂存
git stash apply stash@{num} /应用暂存
git stash drop num/删除对应缓存

取消工作区暂存文件

git reset head 文件名 /取消该文件暂存
git reset head /取消所有暂存

放弃本地文件修改(未缓存)

git checkout -- <filename> (放弃某个文件修改,注意中间有--)
git checkout . 放弃所有文件修改

分支查看

git branch -a 查看所有分支  (也可以看当前是哪个分支-绿色字体的)
git branch -avv 查看所有分支详细信息  (也可以看当前是哪个分支-绿色字体的)
git branch 查看本地所有分支 (也可以看当前是哪个分支-绿色字体的)
git status  /查看我们 工作区的修改的文件

分支切换

git checkout <分支名>

拉取/推送

git remote add <仓库url> /添加远程仓库
git pull 拉取
git push 推送

切新分支开发

git branch -b 新的分支名 /切出来以后自动切换到新分支

提交文件

git add .  暂存更改到缓存区(暂存区文件是绿色的)

比较文件

git diff HEAD /查看 workspace 和 local repository 的差别
git diff HEAD~X /上X次的代码比较

版本更新

git update-git-for-windows 更新版本

分支合并

git merge <要合并过来的分支>

删除分支

git branch -d <分支名称>   //或许删不掉(没有合并,没有解决冲突)
git branch -D <分支名称>  //强制删除

如果这篇文章帮助到了你,请点一个赞哦!!!

Git原理及应用(学习笔记)相关推荐

  1. Unix原理与应用学习笔记----第六章 文件的基本属性2

    Unix原理与应用学习笔记----第六章 文件的基本属性2 改变文件权限命令:chmod 提示:文件或目录创建后,就被赋予一组默认的权限.所有的用户都有读,只有文件的所有者才有写. 相对权限设置 Ch ...

  2. 数据库原理及应用学习笔记

    在前面先记录一个不错的博客内容http://blog.codinglabs.org/articles/theory-of-mysql-index.html 这时在B站上看的东南大学的视频的学习笔记,主 ...

  3. 【笔记】【git】【狂神说Java】Git最新教程通俗易懂 -学习笔记

    前言 学习视频:[狂神说Java]Git最新教程通俗易懂 感谢狂神!!! 此笔记用于记录本人在学习中还有不懂以及值得注意的地方.以方便日后的工作与学习. 笔记中有些个人理解后整理的笔记,可能有所偏差, ...

  4. 通信原理:课程学习笔记3之确知信号和随机过程

    文章目录 1 确知信号 2 随机过程 写在前面:本文源自笔者在大三时对北师大-人工智能学院-郭俊奇老师的"通信原理"课程的部分归纳与整理笔记.此处感谢郭俊奇老师!如发现笔者整理有误 ...

  5. Git克隆Github项目学习笔记

    文章目录 前言 一.下载 Git 二.GitHub官网注册自己账号 三.使用SSH建立Git和GitHub之间的连接 四.在Pycharm工具中配置集成Git和GitHub 五.从GitHub上克隆项 ...

  6. 第3章 直流电机的工作原理及特性 学习笔记(一)

    本周主要学习了直流电机的基本结构及工作原理,需要复习到的知识主要有电磁感应定律和电磁力定律,即安培定律.法拉第定律.洛伦兹定律. 一.基本结构 根据工作原理,直流电机的组成可分为定子.转子和换向器三部 ...

  7. Hbase原理与实践(学习笔记一:基本概念):

    相关笔记: <Hbase原理与实践>读书笔记--1.HBase概述_凯哥多帅哦的博客-CSDN博客_hbase的实现原理1.1 HBase前世今生Google当年风靡一时的"三篇 ...

  8. 锁存器的工作原理_数字电路学习笔记(十):更多锁存器和触发器

    上一章中提到了普通RS锁存器的两大缺点: 1. S端口和R端口不能同时有效,但实际应用中不能保证这种情况不出现,此时可能会出错: 2. 在计算机中,有许多内存单元协同组成一个寄存器,存储同一个数据.但 ...

  9. 黑马公开课——运行原理与GC学习笔记

    .NET Framework 程序的运行原理 .NET Framework的组成: (1)基础类库(BCL):使用线程的类来完成编程,对于不存在的类,就自己编写: (2)编译工具:将源文件,编译成&q ...

  10. NB-IoT从原理到实践 学习笔记 part1-8

    PART A 四大特性篇 第一讲 NB-IoT基本介绍 Narrow Band Internet of Things 5G LTE-V Wifi.UWB LPWA,eMTC BT.Zigbee NB- ...

最新文章

  1. ASP .NET Core使用connection string连接MySQL/MariaDB,并设置UTF-8编码
  2. 聊聊Spring事务失效的12种场景,太坑人了
  3. 普京谈“元宇宙”:这无疑是一种挑战
  4. numpy.concatenate详解
  5. android布局如何空行,借用你的思路和框架,修复了空行、偶尔setText无效、padding设置的bug...
  6. 看图轻松理解数据结构与算法系列(合并排序)
  7. python字符串库函数_Python标准库概览(1):string
  8. 多租户的数据库方案分析
  9. 使用pm2启动Node和Vue项目教程
  10. POJ 3037 SPFA
  11. 【视频】CCNA——小凡模拟器的简单介绍和使用
  12. 关于神经网络的英语单词有,神经网络的英文单词
  13. matlab freqz用法ba,【matlab】freqz函数的使用(一)
  14. 阿里巴巴重要开源项目汇总
  15. mysql 1032 1062_mysql slave频繁报1032_1062错误
  16. Python数值运算操作符
  17. k8s rbac 权限管理控制创建过程+理论知识
  18. ios 微信端 video 标签 兼容问题
  19. cocos2dx Demo
  20. Hadoop大象之旅009-通过Shell操作hdfs

热门文章

  1. 快速了解JDK8中的新日期时间类
  2. SpringBoot整合SpringSecurity+Redis权限控制
  3. python pprint用法_pprint用法
  4. mybatisPlus 生成的19位uuid 在前端精度问题
  5. webrtc ice添加候选项状态返回
  6. 激光干涉仪角度检测机床加工精度
  7. BAT及华为的智慧城市玩法
  8. C#中访问网盘的方法
  9. Xen network Linux
  10. 当你荒废时间的时候别人会有多少在拼命--没有不劳而获的成功