「新手入门福利」一张脑图带你掌握Git命令
时间:2022-07-25
本文章向大家介绍「新手入门福利」一张脑图带你掌握Git命令,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
前言
最近在工作之余,遇到Git上面一些问题,趁这次的机会,补一补Git基础知识。
脑图?
「本文更多梳理的是Git常用命令,非原理篇,需要这部分知识的可以往下看。」
一图解天下?
首先我们的了解Git通常的操作流程,网上流行的不错一张图?
Git经典流程图
基本概念
Git基本命令
基于上面的图,我们就有接下来一些概念?
- 版本库?
.git
- 当我们使用git管理文件时,比如
git init
时,这个时候,会多一个.git
文件,我们把这个文件称之为版本库。 -
.git文件
另外一个作用就是它在创建的时候,会自动创建master分支,并且将HEAD指针指向master分支。
- 当我们使用git管理文件时,比如
- 工作区
- 本地项目存放文件的位置
- 可以理解成图上的workspace
- 暂存区 (Index/Stage)
- 顾名思义就是暂时存放文件的地方,通过是通过add命令将工作区的文件添加到缓冲区
- 本地仓库(Repository)
- 通常情况下,我们使用commit命令可以将暂存区的文件添加到本地仓库
- 通常而言,HEAD指针指向的就是master分支
- 远程仓库(Remote)
- 举个例子,当我们使用GitHub托管我们项目时,它就是一个远程仓库。
- 通常我们使用clone命令将远程仓库代码拷贝下来,本地代码更新后,通过push托送给远程仓库。
Git文件状态
- 通常我们需要查看一个文件的状态
git status
-
Changes not staged for commit
- 表示得大概就是工作区有该内容,但是缓存区没有,需要我们
git add
- 表示得大概就是工作区有该内容,但是缓存区没有,需要我们
-
Changes to be committed
- 一般而言,这个时候,文件放在缓存区了,我们需要
git commit
- 一般而言,这个时候,文件放在缓存区了,我们需要
-
nothing to commit, working tree clean
- 这个时候,我们将本地的代码推送到远端即可
常见命令
git配置命令
Git配置命令
- 列出当前配置
git config --list
- 列出Repository配置
git config --local --list
- 列出全局配置
git config --global --list
- 列出系统配置
git config --system --list
通过上述的命令,发现你并没有配置用户信息的话,接下来配置一下?
- 配置用户名
git config --global user.name "your name"
- 配置用户邮箱
git config --global user.email "youremail@github.com"
分支管理
Git分支管理
- 查看本地分支
git branch
- 查看远程分支
git branch -r
- 查看本地和远程分支
git branch -a
- 从当前分支,切换到其他分支
git checkout <branch-name>
// 举个例子
git checkout feature/tiantian
- 创建并切换到新建分支
git checkout -b <branch-name>
// 举个例子?
git checkout -b feature/tiantian
- 删除分支
git branch -d <branch-name>
// 举个例子?
git branch -d feature/tiantian
- 当前分支与指定分支合并
git merge <branch-name>
// 举个例子?
git merge feature/tiantian
- 查看哪些分支已经合并到当前分支
git branch --merged
- 查看哪些分支没有合并到当前分支
git branch --no-merged
- 查看各个分支最后一个提交对象的信息
git branch -v
- 删除远程分支
git push origin -d <branch-name>
- 重命名分支
git branch -m <oldbranch-name> <newbranch-name>
- 拉取远程分支并创建本地分支
git checkout -b 本地分支名x origin/远程分支名x
// 另外一种方式,也可以完成这个操作。
git fetch origin <branch-name>:<local-branch-name>
// fetch这个指令的话,后续会梳理
fetch指令
Git命令fetch
我理解的就是将远程仓库内容更新到本地,最近与师姐开发项目过程中,使用的就是这个命令。
具体是这样子的?
fetch推荐写法
git fetch origin <branch-name>:<local-branch-name>
- 一般而言,这个origin是远程主机名,一般默认就是origin。
-
branch-name
你要拉取的分支 -
local-branch-name
通常而言,就是你本地新建一个新分支,将origin下的某个分支代码下载到本地分支。
举个例子?
git fetch origin feature/template_excellent:feature/template_layout
// 你的工作目录下,就会有feature/template_layout
// 一般情况下,我们需要做的就是在这个分支上开发新需求
// 完成代码后,我们需要做的就是上传我们的分支
fetch其他写法
- 将某个远程主机的更新,全部取回本地。
git fetch <远程主机名>
- 这样子的话,取回的是所有的分支更新,如果想取回特定分支,可以指定分支名?
git fetch <远程主机名> <分支名>
- 当你想将某个分支的内容取回到本地下某个分支的话,如下?
git fetch origin :<local-branch-name>
// 等价于?
git fetch origin master:<local-branch-name>
花式撤销
Git花式撤销
- 撤销「工作区」修改
- git checkout --
- 暂存区文件撤销 (不覆盖工作区)
- git reset HEAD
- 版本回退
- git reset --(soft | mixed | hard ) < HEAD ~(num) > |
- 指令作用范围--hard回退全部,包括HEAD,index,working tree--mixed回退部分,包括HEAD,index--soft只回退HEAD
工作区命令
状态查询
- 查看状态
- git status
- 查看历史操作记录
- git reflog
- 查看日志
- git log
文档查询
- 展示Git命令大纲
- git help (--help)
- 展示Git命令大纲全部列表
- git help -a
- 展示具体命令说明手册
- git help
文件暂存
Git命令文件暂存
- 添加改动到stash
- git stash save -a “message”
- 删除暂存
- git stash drop <stash@{ID}>
- 查看stash列表
- git stash list
- 删除全部缓存
- git stash clear
- 恢复改动
- git stash pop <stash@{ID}>
差异比较
Git文件比较
- 比较工作区与缓存区
- git diff
- 比较缓存区与本地库最近一次commit内容
- git diff -- cached
- 比较工作区与本地最近一次commit内容
- git diff HEAD
- 比较两个commit之间差异
- git diff
分支命名
Git分支管理规范
「master分支」
- 主分支,用于部署生产环境的分支,确保稳定性。
- master分支一般由develop以及hotfix分支合并,任何情况下都不能直接修改代码。
「develop 分支」
- develop为开发分支,通常情况下,保存最新完成以及bug修复后的代码。
- 开发新功能时,feature分支都是基于develop分支下创建的。
「feature分支」
- 开发新功能,基本上以develop为基础创建feature分支。
- 分支命名:feature/ 开头的为特性分支, 命名规则: feature/user_module、 feature/cart_module。
**这点我深有体会,我在网易,mentor就是这么教我的,**通常建一个feature分支。
「release分支」
- release 为预上线分支,发布提测阶段,会release分支代码为基准提测。
「hotfix分支」
- 分支命名:hotfix/ 开头的为修复分支,它的命名规则与 feature 分支类似。
- 线上出现紧急问题时,需要及时修复,以master分支为基线,创建hotfix分支,修复完成后,需要合并到master分支和develop分支。
参考来着:稻草叔叔
基本操作
有了上述的基本了解后,那么我们就来看看整体的一个流程吧。
- 创建本地仓库 git init ❝git init ❞
- 链接本地仓库与远端仓库 ❝git remote add origin origin默认是远端仓库别名 url 可以是「可以使用https或者ssh的方式新建」 ❞
- 检查配置信息
- git config --list
- Git user name 与email ❝git config --global user.name "yourname" git config --global user.email "your_email" ❞
- 生成SSH密钥 ❝ssh-keygen -t rsa -C "这里换上你的邮箱" cd ~/.ssh 里面有一个文件名为id_rsa.pub,把里面的内容复制到git库的我的SSHKEYs中 ❞
- 常看远端仓库信息
- git remote -v
- 远端仓库重新命名
- git remote rename old new
- 提交到缓存区
- git add . 全部上传到缓存区
- git add指定文件
- 提交到本地仓库
- git commit -m 'some message'
- 提交远程仓库
- git push <远程主机名> <本地分支名>:<远程分支名>
- 查看分支
- git branch
- 创建新分支
- git branch
- 切换分支
- git checkout
- 创建分支并切换
- git checkout -b
- 删除分支
- git branch -d
- 删除远程分支
- git push -d
- 切换分支
- git checkout
忽略文件 .gitignore
这个文件的作用,会去忽略一些不需要纳入Git管理这种,我们也不希望出现在未跟踪文件列表。
那么我们来看看如何配置该文件信息。
# 此行为注释 会被Git忽略
# 忽略 node_modules/ 目录下所有的文件
node_modules
# 忽略所有.vscode结尾的文件
.vscode
# 忽略所有.md结尾的文件
*.md
# 但README.md 除外
!README.md
# 会忽略 doc/something.txt 但不会忽略doc/images/arch.txt
doc/*.txt
# 忽略 doc/ 目录下所有扩展名为txt文件
doc/**/*.txt
参考
- git基本操作,一篇文章就够了!
- Git 常用操作总结
- 您必须知道的 Git 分支开发规范
- 如何优雅地使用 Git
- 优雅的提交你的 Git Commit Message
- 详解git pull和git fetch的区别
- 十分钟的时间,武装你的代码库
- 「备忘录」60+Git常用命令行
- [置顶] 浅谈我为什么选择用Retrofit作为我的网络请求框架
- 基于HTML5的Canvas指纹跟踪技术
- 有关 Android 应用桌面角标 (BadgeNumber) 实现的探讨
- XSS的原理分析与解剖
- Hold安全公司公布俄罗斯大型泄密事件细节
- 走近科学:如何搞定各种各样的终端机
- android 打造不同的Seekbar
- 最简单最常用的LinearLayout线性布局
- 漏洞科普:你对弱口令重视吗?
- 自定义View简单使用
- 正确姿势:如何调戏蹭网者
- 当我们讨论流畅度的时候,我们究竟在说什么?
- ImageButton和ZoomButton使用大全
- Android 插件化突破应用市场无法上广告的问题
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- (leetcode每日打卡)秋叶收藏集【动态规划】
- 设计模式~调停者模式(Mediator)
- Sequential Nim(CodeForces - 1382B)【博弈】
- Less Coin Tosses(Gym - 102346L)【打表+找规律】
- leetcode1558题解【贪心】
- 如何将炫酷的报表直接截图发送邮件——在Superset 0.37使用Schedule Email功能
- Kafka监控必备——Kafka-Eagle 2.0.2正式发布
- 安防/教育/互联网直播视频组件EasyRTSPServer读取本地文件报错找不到EasyStreamClient.dll解决方法
- C语言编程入门之--第六章C语言控制语句
- RTSP网络摄像头网页无插件直播视频平台EasyNVR自定义标题和CopyRight步骤
- 设计模式~解释器
- RTSP/GB28181/HIKSDK/Ehome协议视频上云服务平台EasyCVR人脸识别开发ArcSoftFace环境搭建
- RTSP/GB28181/HIKSDK/EHome流媒体协议视频上云网关EasyCVR流地址密码不正确如何修正?
- tmux终端意外出现控制字符
- clickhouse编译安装以及搭建mysql实时复制