Git 基础知识大全
Git 基础知识大全
文章目录
- Git 基础知识大全
- 1. 原理
- 2. 配置文件
- 3. 基本操作
- 4. 远程操作
- 5. 删除操作
- 6. 检出操作
- 7. 分支操作
- 8. 日志
- 9. 比对文件
- 10. 忽略文件
- 11. 多人协同开发
- 12. 标签
- 13. GitHub
1. 原理
Git是一个分布式的版本控制系统,最初由Linus Torvalds编写,用作Linux内核代码的管理。
git底层采用的是SHA-1校验,保证提交的正确性,文件内容以及文件、目录、版本、标签和提交的关联,都通过安全的加密哈希校验算法(SHA1)保护。这可以避免代码和修改历史被不小心或者恶意改变,并且保证修改历史完全可追迹。
git基于多种传输协议,为了数据传输安全最常用的就是https和ssh,设置ssh密钥的目的是为了节省输入用户名密码的过程,同时保证传输安全,并不是必须设置。
Git不只提取最新版的文件快照,而是把代码仓库完整的镜像下来
- 版本回溯到过去某个时间点状态
- 比较文件变化细节,查看谁修改了哪个地方
Git 保存的不是文件的变化或者差异,而是一系列不同时刻的 快照 形成索引 。如果下次文件的内容未发生变化就会产生指针对上一次文件进行指向,内容发生变化后才会重新保存,称为快照流,各个版本之间形成的历史记录也就是每次快照之间指针指向的父子关系(链表形式)
2. 配置文件
# 查看版本
git --version
Git 的配置文件在用户主目录下的一个隐藏文件.gitconfig
中
通常情况下,每台计算机上只需要配置一次 Git,当 Git 程序升级时会保留配置信息。 可以在任何时候再次通过运行 git config
命令来修改它们。
git config [param]
项目仓库级别配置
git config --global [param]
当前系统用户级别配置,配置文件在user文件夹下
param参数如下
user.name "天宇龙腾"
user.email tylt6688@gmail.com
让 Git 显示不同的颜色,会让命令输出看起来更醒目
git config --global color.ui true
配置命令别名
git config --global alias.st statusgit config --global alias.last 'log -1'
cd ~
回到用户目录下
3. 基本操作
- 初始化 git 仓库,用于创建空的中央仓库,初始化.git文件夹及其内容,方便其它开发者 clone ,开发者本身一般不会使用
git init
- 下载仓库副本 (设定深度版本,只下载最后更新的一次版本)
git clone <url> (--depth 1)
- 对当前目录中修改的文件添加进缓存区,git 开始对文件进行跟踪
git add .
- 提交到本地库
git commit -m "message"
- 查看当前仓库工作目录和缓存区状态,显示当前进展
git status
# 将暂存区的文件推送至远程仓库
# 使用强制推送'-f'是因为一般新建仓库的时候会生成Readme.md文件,导致需要先git fetch才能推送,但这个readme文件其实是不需要的
# 因为在生成本地项目的时候一般也会生成一个readme文件,所以直接强制推送过去
git push origin master -f
有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。 此时,可以运行带有 --amend 选项的提交命令来重新提交
git commit --amend
4. 远程操作
# 列出远程连接
git remote -v
# 如果你还没有克隆现有仓库,并欲将你的仓库连接到某个远程服务器(连接git远程仓库)
# origin 是远程仓库地址的别名,取什么名字都可以,你也可以在 push 时将你喜欢的名字替换origin
git remote add origin <url>
# 删除某个远程连接
git remote rm <name>
# 重命名别名
git remote rename <old-name> <new-name>
远程仓库与本地仓库这两个独立仓库想要初次建立完毕想要进行合并时,先在本地初始化连接远程完毕后拉一下远程库,并合并一下两个独立仓库的历史
git pull origin master --allow-unrelated-histories
git push origin master:master
5. 删除操作
- 从版本库中删除文件
git rm <filename>
- 从版本库删除文件,但是本地不删除文件
git rm --cached <filename>
- 忽略文件
通过.gitignore
文件屏蔽某些不必要上传的文件
- 忽略某一类的文件
*.txt
6. 检出操作
- 查看版本中文件所发生的变动
git checkout <hashIndex> <filename>
7. 分支操作
git中创建新分支,类似于新建一个指针,切换分支就是将HEAD指针指向另一个分支
Git Flow 分支种类
master
主干分支
develop
开发分支
hotfix
修复分支
release
准生产分支(预发布分支)
feature
功能分支
- 查看当前项目所有的分支
git branch -v
- 合并分支
- 切换分支到master主分支
git checkout master
- 对所需dev分支进行合并
git merge dev
- 删除未合并分支
git branch -D <name>
- 删除已合并分支
git branch -d <name>
- 查看远程库信息
git remote -v
8. 日志
- 显示日志,控制台出现 : 表示多页展示,space向下翻页,B向上翻页,Q退出
git log
- 显示漂亮日志(单行简洁日志,全部索引展示)
git log --pretty=oneline
- 显示漂亮日志(截取部分索引展示)
git log --oneline
- 显示
HEAD@{N}
指针移动步数(截取部分索引展示)
git reflog
- 基于reflog显示的"索引值"进行版本回退
git reset --hard <hashIndex>
- 只能回退的两种办法^ ~
git reset --hard HEAD^^^git reset --hard HEAD~3
hard是硬回退,工作区、暂存区与本地库都会进行回退(用的最多)
mixed 暂存区、本地库会进行回退,工作区不动
soft 本地库会进行回退,工作区、暂存区不动
9. 比对文件
git 以行为单位做对比,改动时为删除一行,增加一行
比对工作区与暂存区内容
比对单个文件差异
git diff xxx.file比对所有文件差异
git diff
比对暂存区与本地库的差异
git diff HEAD xxx.file
10. 忽略文件
有时某些文件必须放于git工作目录中但是不选择提交,使用.gitignore
文件进行忽略追踪
忽略文件的原则是:
- 忽略操作系统自动生成的文件,比如缩略图等;
- 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
- 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
# 排除所有.开头的隐藏文件:
.*
# 排除所有.class文件:
*.class
# 排除相应文件夹文件:
dictionary# 添加例外规则 !+文件名,不排除.gitignore和App.class:
!.gitignore
!App.class
检查相应忽略文件的规则,便于修改.gitignore
文件规则
git check-ignore -v App.class
强制添加被忽略的某一个文件
git add -f App.class
git再次忽略某个文件后同步github更新,首先,删除本地缓存。
git rm -r --cached dir #要删除的目录m
然后,提交修改。
git push
11. 多人协同开发
非本组织团队对远程仓库进行协同工作时需要先 fork
到复制一份到自己的仓库,再clone
下来,编写完毕后向远程仓库发起 pull request
请求,由远程仓库管理员审核后进行 merge
合并操作
- 远程库抓取(不改变本地库,需要自己做合并操作)
git fetch origin master
- 切换到远程分支查看
git checkout origin/master
- 使本地库与远程库合并
git merge origin/master
- 从远程库更新本地库(pull = fetch + merge)
git fetch
git pull
12. 标签
发布一个版本时,我们通常先在版本库中打一个标签(tag
),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。
由于commit
号过于繁琐,所以自定义一个标签名便于查找,所以,tag
就是一个让人容易记住的有意义的名字,它跟某个commit
绑在一起。
# 选择一个分支
git branchgit checkout master# 打标签
git tag v1.0
# 对指定的commit id打标签(使用git log查出)
git tag v0.9 fb8b190
# 查询标签
git tag
# 查看指定标签信息
git show v0.9# 删除标签
git tag -d v0.1# 推送指定标签到远程库
git push origin v1.0
# 一次性推送全部本地标签
git push origin --tags
13. GitHub
github1s
https://gitpod.io/#/xxx
git clone https://github.com/...
git clone https://github.com.cnpmjs.org/...更换镜像加快速度
--depth 1按深度拿最近一次更新的
在仓库中按 。
可直接跳转到VScode中
Git 基础知识大全相关推荐
- 计算机基础知识整理大全_【干货整理】高中文言文基础知识大全,速度收藏!...
今天和大家分享的是 高中文言文基础知识大全 高中文言文基础知识大全 文言文是以古汉语文雅的口语为基础的书面形式,在远古时代文言文与平常的口语的差异微乎其微.现今文言文是中国古代的一种书面语言组成的文章 ...
- Python学习--最完整的基础知识大全
##Python学习–最完整的基础知识大全 关于python的基础知识学习,网上有很多资料,今天我就把我收藏的整理一下分享给大家! #####菜鸟教程python2 #####菜鸟教程python3 ...
- java(5)---Java基础知识大全
Java基础知识大全 一.基础知识: 1.JVM.JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. java语言是跨平 ...
- 电脑的基础知识_电脑的基础知识大全,你确定都知道?
电脑的基础知识大全,你确定都知道? 一.软件系统 软件系统包括:操作系统.应用软件等.应用软件中电脑行业的管理软件,IT电脑行业的发展必备利器,电脑行业的erp软件. 二.硬件系统 硬件系统包括:机箱 ...
- 查找元器件_电子元器件-常用电子元器件基础知识大全
电子元器件-常用电子元器件基础知识大全 一.电阻器(R) 简称电阻,是指具有一定技术性能的在电路中专起电阻作用的元件,可用来调节电路中的电流和电压,或者作为电路中的负载.1.电阻的参数: a. 阻值: ...
- 计算机硬件知识硬盘,DIY硬件知识:小白必看的硬盘基础知识大全
硬盘是DIY硬件最为重要的存储设备,如果没有硬盘,虽然能够点亮机器,但是你不能进入系统并且保存任何资料文件.众所周知,目前主流的硬盘类型有两种,一种为机械硬盘,另一种为固态硬盘,固态硬盘是目前最流行的 ...
- C语言基础知识入门和C语言入门基础知识大全
一.C语言基础知识入门 C语言一出现,就以其丰富的功能.强大的表达能力.灵活性.方便性和广泛的应用,在世界范围内迅速普及和普及.C语言不仅高效而且可移植.它可以用来开发应用软件.驱动程序.操作系统等. ...
- 视频教程-快速入门Python基础教程_Python基础知识大全-Python
快速入门Python基础教程_Python基础知识大全 十余年计算机技术领域从业经验,在中国电信.盛大游戏等多家五百强企业任职技术开发指导顾问,国内IT技术发展奠基人之一. 杨千锋 ¥99.00 立即 ...
- 计算机基础知识 事业编,事业单位考试计算机基础知识大全.doc
事业单位考试计算机基础知识大全 PAGE PAGE 1 判断题 冯?诺依曼原理是计算机的唯一工作原理.( × ) 计算机能直接识别汇编语言程序.( × ) 计算机能直接执行高级语言源程序.( × ) ...
最新文章
- NO ULINK Device found解决方法
- 第一次来请大家多多关照---毕业生找工作篇
- QML UI 与逻辑分开
- 24 GISer必备知识(一) 坐标系
- Jmock 原理简单说明
- c语言四个数找大wxyz,2015年计算机二级《C语言》考试上机测试题(7)
- THML结构语义化之table/form
- 应用实例_兴达奇智能燃烧控制器BMU460DP现场应用实例图
- docker学习之docker镜像加速器
- 景区厕所污水处理有哪些问题?
- C#:实现大图片压缩算法(附完整源码)
- linux 怎么把新硬盘分区,linux添加新硬盘分区
- Unity中关于Destroy的API
- 解答:为什么要搭建企业论坛?如何快速搭建?
- 学习ARM开发(6)
- python如何求矩阵逆运算_Sympy复矩阵求逆/运算
- AMD Opteron 185 + ATI RDX200 安装雪豹成功。
- 计算机教师资格证难不难考,教师资格证 信息技术难考吗
- 今日科普:MEMS传感器的应用案例介绍
- 雷神Spring实验23
热门文章
- uva 11021 Tribbles 麻球繁衍 概率
- 新时达服务器说明书_新时达调试指导说明
- java中utf-8怎么设置_eclipse中UTF-8设置
- ZAP日志框架lumberjack日志归档库的分析使用
- Istio - 集成ELK - HPE_INVALID_METHOD, lumberjack protocol error
- 【项目】游戏开发期末大作业 之 基于Java的小游戏 “大鱼吃小鱼“ (代码素材齐全)
- 在线获取外链的php源码,y.qq.com-php获取QQ音乐外链源码
- Ubuntu16.04更改新加卷名称
- 基于BS架构考试系统的设计与分析
- Redis实现手机验证码功能