Git原理及应用(学习笔记)

Git概述

git的原理是存储元数据(key-value形式)
每次提交代码以后,git就会将当前内容存储到类似hashmap的数据结构中
存储命令:git hash-object -w “文件名”
查看hamp值:git cat-file -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 <分支名称>  //强制删除

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值