GIT官网地址

一、了解

GIT是什么??或者优势是什么?

1、git更像是一个小型的文件系统,提供了许多以此为基础构建的超强工具;每次提交更新或者保存项目状态时,就会对当时全部文件创建一个快照并保存这个快照的索引;
2、近乎所有的操作都是本地执行:大多数操作只需要访问本地文件和资源,不需要其他网络上的信息;
3、保证完整性:git所有的数据在存储前都得计算校验和,然后以校验和来引用,校验和的机制SHA-1散列;
4、git一般都只添加数据:git几乎不会执行任何可能导致文件不可恢复的操作;

GIT三种状态:

1、已提交committed:表示数据已经安全的保存在本地数据库中;
2、已修改modified:表示修改了文件,但还没保存到数据库中
3、已暂存staged:表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中;

二、配置

git  config --global user.name "***"
git  config  --global user.email "*****"查看配置命令:
git config --list --global

三、命令

GIT基础git init                 创建仓库
git status               查看状态
git clone 'git仓库'  '本地目录名'    克隆仓库git status  检查当前文件状态- git status -s/--short  状态简览,格式更为紧凑的输出
git add     跟踪新文件【处于暂存状态】
git diff    比较的是工作目录中的当前文件和暂存区快照之间的差异,只显示尚未暂存的改动,也就是未commit之前的变动- git diff --staged 比较已暂存文件与最后一次提交的文件差异- git diff --cached 比较已暂存起来的差异- git diff -- '文件名'  只显示某一文件的差别
git commit 提交更新- git commit -m'备注'- git commit -a 自动把所有已跟踪过的文件暂存起来一并提交,省去了git add步骤- git commit -amend 修改最近一次提交的历史记录
git rm 移除文件:包括工作目录和暂存区域
git mv 移动文件/重命名忽略文件:创建一个名为.gitignore的文件,然后列出忽略的文件的模式;- *:匹配零个或多个任意字符;- [abc]:匹配任何一个列在方括号中的字符;- ?:只匹配一个任意字符- [0-9]:匹配所有0-9的数字git log 查看提交历史- git log -p - git log --oneline  - git log --graph撤销操作
git reset HEAD '文件名'  取消暂存的文件- git reset --hard^  回退一个版本- git reset --hard 'SHA-1名' 回退到某个版本
git checkout -- '文件名'  撤销对文件的修改远程仓库的使用
git remote   查看远程仓库- git remote -v- git remote show '仓库名'   查看某个远程仓库
git remote add '仓库名' url   添加远程仓库
git fetch '仓库名'   从远程仓库中抓取和拉取,只是将数据下载到本地仓库,并不会主动合并或者修改当前的工作目录
git pull   抓取数据并自动合并到当前所在的分支
git push '仓库名' '分支'  推送到远程仓库
git remote rename  '旧仓库名' '新仓库名' 重命名远程仓库
git remoute remove/rm  '仓库名'    移除远程仓库打标签
GIT 支持两种标签:轻量标签与附注标签
git  tag 列出标签- git tag -l/--list
git  tag -a '标签名'  创建附注标签
git  tag  '标签名'  创建轻量标签
git show '标签名'  查看打标签信息
git tag -d '标签名'  删除标签git push命令并不会传送标签到远程仓库服务器上,所以创建完标签后必须显式的推送标签到远程上
git push '远程仓库名' '标签名'  推送一个标签- git push '远程仓库名' -- tags 将所有不在远程仓库服务器上的标签全部传送
git push '远程仓库名' --delete '标签名' 删除远程标签
分支管理HEAD指向当前所在的分支git branch '分支名'  创建分支- git branch -v- git branch -merged   已合并到当前分支的分支- git branch -no-merged    尚未合并的分支
git checkout '分支名' 切换分支- git checkout -n '分支名' 创建一个新分支后立即切换过去
git branch -d/-D  删除分支修复命令
git stash 把当前的工作隐藏起来,以后恢复现场后继续工作
git stash list查看所有被隐藏的文件列表
git stash apply 恢复被隐藏的文件,但是内容不删除
git stash drop 删除文件
git stash pop恢复文件的同时也删除文件

BUG修复
开发过程中需临时修复BUG过程1、在当前开发的分支(test):git stash(把内容隐藏起来)
2、确定去哪个分支修复bug,切换过去并创建临时分支:git checkout master  /   git checkout -b fix
3、修复内容
4、添加
5、提交
6、合并分支:将新建的分支合并到主分支上:git merge fix
7、删除临时分支:git branch -d fix
8、切回到最开始开发的分支:git checkout
9、恢复开发分支的内容:git stash pop(或者git stash apply:恢复stash内容并不删除,还需git stash drop 删除)



四、概念

变基
原理:找到这两个分支的共同祖先(当前分支和变基操作的目标基底分支),然后对比当前分支相对于祖先的历次提交,提取相应的修改并存为临时文件,然后将当前分支指向目标基底,最后以此将之前另存为临时文件的修改依序应用;

变基是将一系列提交按照原有次序依次应用到另一分支上,而合并是把最终结果合在一起;

五、内部原理

GIT对象

位于 .git/objects 文件
git都得核心部分是一个简单的键值对数据库,你可以向GIT仓库中插入任意类型的内容,它会返回一个唯一的键,通过该键可以再任意时刻再次取回该内容。

1、git hash-object


2、find .git/objects -type f查看objects目录![](https://img-blog.csdnimg.cn/e685bd4863e448b0ae6993734430be51.png)
3、git cat-file -p ‘SHA-1校验和’ 文件内容

4、git cat-file -t ‘SHA-1校验和’ 内部存储的对象类型

GIT引用

位于.git/refs

1、HEAD引用

GIT是如何知道最新提交的SHA-1值呢?答案就是HEAD文件。
HEAD文件指向目前所在的分支,通常是一个符号引用(表示它是一个指向其他引用的指针)。

2、标签引用

3、远程引用
远程引用是可读的,虽然可以git checkout到某个远程引用,但是GIT并不会将HEAD引用指向该远程引用,索引你永远不能通过commit命令来更新远程引用;
GIT将远程引用作为记录远程服务器上各分支最后已知位置状态的书签来管理

GIT包文件

GIT时常会自动对仓库进行重新打包以节省空间。或者随时执行git gc命令来这么做;
git gc --auto:手动执行自动垃圾回收

GIT数据恢复

git reflog 引用日志,每一次提交或者更新,引用日志也都会更新
引用日志只存在于本地仓库,它只是一个记录你在自己的仓库里做过什么操作的日志

GIT --local -branching-on-the-cheap相关推荐

  1. Idea git local changes were not restore

    转:https://blog.csdn.net/wgy1160754366/article/details/69547491 https://www.oschina.net/question/9484 ...

  2. A successful Git branching model

    原文:http://nvie.com/posts/a-successful-git-branching-model/ In this post I present the development mo ...

  3. 【版本控制管理】 深入 001 A successful Git branching model GIT 项目分支策略和释放管理

    本文,转于老外的一个实际git的管理项目和想法.这篇文章作者把自己工作中实际使用git的版本控制构建做了总结.对的,就是git 的版本管理的构架.文章列举了一个复杂的项目开发生命维护的框架,构建了一个 ...

  4. Git - Tutorial官方【转】

    转自:http://www.vogella.com/tutorials/Git/article.html#git_rename_branch Lars Vogel Version 5.8 Copyri ...

  5. git 改了一段代码不想要了_初识Git

    如果给所有软件列出一个排行榜的话,那么Git定会名列前茅.Git对于代码项目的管理是具有划时代意义的,向Linus致敬,不但写出了可以与Windows争锋的Linux系统,还设计实现了如此强大的版本管 ...

  6. git rebase用法_Git入门实战

    如果给所有软件列出一个排行榜的话,那么Git定会名列前茅.Git对于代码项目的管理是具有划时代意义的,向Linus致敬,不但写出了可以与Windows争锋的Linux系统,还设计实现了如此强大的版本管 ...

  7. 团队开发之Git管理及使用

    什么是Git 以下摘自官网: Git is a free and open source distributed version control system designed to handle e ...

  8. Git的基本概念和SourceTree的使用

    (一)Git (1)Git简介 ​ Git是目前世界上最先进的分布式版本控制系统,在处理各种项目时都十分高效,而且非常的高大上. ​ 作为一个分布式版本控制系统来说,Git是没有中央服务器的,每个人的 ...

  9. Git三大特色之Branch(分支)

    转自: https://blog.csdn.net/qq_32452623/article/details/78355976 我习惯每篇博客都有个开篇 还记得 Git 系列第一篇 Git 自我介绍的话 ...

最新文章

  1. redis持久化 mysql_Redis 如何保持和MySQL数据一致
  2. 死锁的4个必要条件和处理策略
  3. python+正则+多进程爬取糗事百科图片
  4. java hrows使用的解释_Android JNI学习之javah命令的正确使用(找了好半天才找到的,汉,网上好多说法都没用)...
  5. mysql之 mysql 5.6不停机主从搭建(一主一从基于日志点复制)
  6. 阿里java面_我的后端Java面经、八面阿里,已拿offer!
  7. 中望龙腾(广州)c++实习
  8. 中国气象局发布实施细则 推进气象数据安全合规有序开放共享
  9. Pygame教程(预备篇)
  10. 公众号获取token失败_关于微信公众号开发的Token验证失败该如何解决?
  11. java short =_java short类型取值范围与用法
  12. 硬件测试转软件研发,硬件测试可以考虑的发展方向
  13. web课程设计网页规划与设计(HTML+CSS+JavaScript仿悦世界游戏官网 6个页面)
  14. 获取高匿代理ip的步骤思路(推荐使用--刚找到的方法判断是否高匿)
  15. 软件需求分析报告 -机票预订系统
  16. Java仿QQ聊天系统Eclipse+MySql实现
  17. Holder不等式的证明
  18. 树莓派4B配置Selenium库+设置无图无头属性
  19. husky + lint-staged + commitizen 配置提交代码规范
  20. html中加好看的边框,html – CSS3中的嵌入边框很好

热门文章

  1. F12窗口设置视频播放速度,想要多快要多快
  2. 计算机组成原理 第四章存储系统(二)测试
  3. 西门子atch指令详解_西门子plc指令大全详解
  4. 关于NSToolbar的使用
  5. 使用Servlet实现重定向到另一个Servlet文件下载服务端下载
  6. 在Linux操作系统下的PPPoE拨号上网
  7. 阿里云 EMR Remote Shuffle Service 在小米的实践
  8. 2014年11月中华架构师大会关于大数据云技术文档分享
  9. 烽火推系统源码,抖音矩阵系统,抖音SEO源码独立部署tell
  10. 小白也能学会的模拟屏幕滑动与手势密码绘制