Git原理及应用(学习笔记)
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原理及应用(学习笔记)相关推荐
- Unix原理与应用学习笔记----第六章 文件的基本属性2
Unix原理与应用学习笔记----第六章 文件的基本属性2 改变文件权限命令:chmod 提示:文件或目录创建后,就被赋予一组默认的权限.所有的用户都有读,只有文件的所有者才有写. 相对权限设置 Ch ...
- 数据库原理及应用学习笔记
在前面先记录一个不错的博客内容http://blog.codinglabs.org/articles/theory-of-mysql-index.html 这时在B站上看的东南大学的视频的学习笔记,主 ...
- 【笔记】【git】【狂神说Java】Git最新教程通俗易懂 -学习笔记
前言 学习视频:[狂神说Java]Git最新教程通俗易懂 感谢狂神!!! 此笔记用于记录本人在学习中还有不懂以及值得注意的地方.以方便日后的工作与学习. 笔记中有些个人理解后整理的笔记,可能有所偏差, ...
- 通信原理:课程学习笔记3之确知信号和随机过程
文章目录 1 确知信号 2 随机过程 写在前面:本文源自笔者在大三时对北师大-人工智能学院-郭俊奇老师的"通信原理"课程的部分归纳与整理笔记.此处感谢郭俊奇老师!如发现笔者整理有误 ...
- Git克隆Github项目学习笔记
文章目录 前言 一.下载 Git 二.GitHub官网注册自己账号 三.使用SSH建立Git和GitHub之间的连接 四.在Pycharm工具中配置集成Git和GitHub 五.从GitHub上克隆项 ...
- 第3章 直流电机的工作原理及特性 学习笔记(一)
本周主要学习了直流电机的基本结构及工作原理,需要复习到的知识主要有电磁感应定律和电磁力定律,即安培定律.法拉第定律.洛伦兹定律. 一.基本结构 根据工作原理,直流电机的组成可分为定子.转子和换向器三部 ...
- Hbase原理与实践(学习笔记一:基本概念):
相关笔记: <Hbase原理与实践>读书笔记--1.HBase概述_凯哥多帅哦的博客-CSDN博客_hbase的实现原理1.1 HBase前世今生Google当年风靡一时的"三篇 ...
- 锁存器的工作原理_数字电路学习笔记(十):更多锁存器和触发器
上一章中提到了普通RS锁存器的两大缺点: 1. S端口和R端口不能同时有效,但实际应用中不能保证这种情况不出现,此时可能会出错: 2. 在计算机中,有许多内存单元协同组成一个寄存器,存储同一个数据.但 ...
- 黑马公开课——运行原理与GC学习笔记
.NET Framework 程序的运行原理 .NET Framework的组成: (1)基础类库(BCL):使用线程的类来完成编程,对于不存在的类,就自己编写: (2)编译工具:将源文件,编译成&q ...
- NB-IoT从原理到实践 学习笔记 part1-8
PART A 四大特性篇 第一讲 NB-IoT基本介绍 Narrow Band Internet of Things 5G LTE-V Wifi.UWB LPWA,eMTC BT.Zigbee NB- ...
最新文章
- ASP .NET Core使用connection string连接MySQL/MariaDB,并设置UTF-8编码
- 聊聊Spring事务失效的12种场景,太坑人了
- 普京谈“元宇宙”:这无疑是一种挑战
- numpy.concatenate详解
- android布局如何空行,借用你的思路和框架,修复了空行、偶尔setText无效、padding设置的bug...
- 看图轻松理解数据结构与算法系列(合并排序)
- python字符串库函数_Python标准库概览(1):string
- 多租户的数据库方案分析
- 使用pm2启动Node和Vue项目教程
- POJ 3037 SPFA
- 【视频】CCNA——小凡模拟器的简单介绍和使用
- 关于神经网络的英语单词有,神经网络的英文单词
- matlab freqz用法ba,【matlab】freqz函数的使用(一)
- 阿里巴巴重要开源项目汇总
- mysql 1032 1062_mysql slave频繁报1032_1062错误
- Python数值运算操作符
- k8s rbac 权限管理控制创建过程+理论知识
- ios 微信端 video 标签 兼容问题
- cocos2dx Demo
- Hadoop大象之旅009-通过Shell操作hdfs