Git进阶笔记系列(01)Git核心架构原理 | 常用命令实战集合

读书笔记:卓越强迫症+强大恐惧症,在亲子家庭、职场关系里尤其是纵向关系模型里,这两种状态很容易无缝衔接。尤其父母对子女、领导对下属,都有望子成龙、强将无弱兵的期望,然而在你的面前,他们才是永远强大的那一个。当子女‘不听话’,下属‘不可控’,他们出现了强大恐惧症。两个矛盾体,让父母、领导开始不知所措,无法信赖对方,即使信赖也难以接纳并非永远强大的自己。

一、前言背景

二、Git是什么?

2.1 和其他版本管理工具差别是什么?

三、Git核心架构

3.1 架构原理

3.1.1 远程仓库

3.1.2 本地仓库

3.2 git工作指南

四、git 配置管理

五、常用命令实战详解

5.1 新建本地仓库

5.2 分支管理

5.3 代码管理

5.4 stash管理

5.5 标签管理

5.6 版本回退

六、 命令集合


【公众号搜索:拉丁解牛说技术】欢迎一起交流讨论。

一、前言背景

Git是目前最流行的分布式代码版本管理平台,简单好用、稳定可靠的特性,得到行业广泛认可应用。尤其在可视化管理工具普及,以及集成到开发工具背景下,新手几乎不需要专门学习Git,通过了解几个简单按钮功能,就可以在工作当中轻松完成git管理代码提交、合并。

然而,随着研发经验的不断提升、岗位工作对自身也提出新的要求,新手小白,逐渐需要应对解决代码冲突、回滚、版本管理、仓库搭建运维等复杂工作。此时深入实践掌握Git核心架构原理、git常用功能命令、Git仓库管理配置等技能,显得尤为重要。

二、Git是什么?

Git是一个分布式版本管理系统,它允许开发者跟踪代码的更改,协作开发,以及在不同版本之间切换。Git 的主要特点包括:分布式架构设计、简单易用、本地离线修改提交、灵活的版本控制。

2.1 和其他版本管理工具差别是什么?

Git采用分布式的版本管理架构:每个开发者都有一个完整的代码库副本,允许离线操作和分支管理,即使远程git库挂了,数据丢了也不用过于担心。由于分布在各地的开发者本地有副本,代码不会丢失。而传统版本控制系统比如SVN是集中式管理,开发者必须连接到中央服务器才可以管理追踪代码,中央库如果出故障,开发者无法管理操作代码。

Git仅存储版本快照:开发者每次提交,Git仅保存修改文件最新内容快照,通过版本链来管理内容版本。而传统SVN、CVS是记录具体内容比较修改记录。Git在宏观上,是对代码文件整体变化的关注,只要文件有修改,不过内容多少,统一是一次版本更新,记录到文件系统。而SVN、CSV会详细记录着每个版本相关文件修改差异,关注的是细节。

几乎是纯本地管理:Git由于本地仓库和本地副本的存在,开发者即使没有网络,也可以先在本地完成代码修改提交,并且随时可以查看历史版本差异和历史修改记录。当有网络的时候,直接push本地最新版本到远程即可。离线的操作,非常轻量和高效。

三、Git核心架构原理

Git的核心架构由远程仓库(remote)和本地仓库(repository)两部分组成。

3.1 架构原理

3.1.1 远程仓库

远程服务器的仓库,常用的有github、gitlab、bitbucket、gitee等平台仓库。大部分企业选择在公司内部搭建git远程仓库管理内部项目系统源码,避免公司代码资产流失到外部互联网上。

企业内部运维管理人员通过在远程仓库实现代码版本管理、用户管理、项目授权、devops集成、用户ssh公钥管理等核心功能。

3.1.2 本地仓库

开发者通过git clone复制保存或者git add remote origin 关联远程仓库到本地,初始化本地仓库。如果不想让代码共享到远程仓库,也不需要和其他人协作。本地仓库也是一个功能完善的git仓库,在本地也可以进行灵活的版本管理。

本地git版本库,又细分为:工作区目录workspace、暂存区index、本地库.git。

比如我在本地电脑:新建一个目录细分工作区目录ladingjieniu-proj001,通过git init 初始化并新建一个本地版本库,库地址是当前目录下的.git文件夹。

里面新增一个lading.txt文件。

.git目录下,会自动新增暂存区index目录。

3.2 git工作指南

开启一个项目的git版本管理,一般都是2个模式。一个是直接从远程库clone项目到本地,然后开始开发迭代。另一个就是先在本地创建好本地库,然后通过git add remote origin 来关联远程库,随后开始迭代推送代码。

第一个模式比较常见,具体流程如下:

1、首先通过git clone拷贝远程代码库到本地库。后期远程库有其他人推送更新,通过git fetch \ pull命令拉取远程最新分支信息更新到本地。

2、本地仓库新增或者checkout到对应分支进行开发。

3、开发迭代完成后,通过git add命令,提交本地代码到暂存区index。

4、随后通过git commit -am 'message 说明'提交本次变更到本地库.git目录。

5、最后通过git push将本地库的全部更新推送到远程库。

四、git 配置管理

在我们本地仓库,git的配置文件有三种级别,分别是仓库级别、用户级别、系统级别。三者的优先级从高到底分别是:仓库local信息> 用户级别global信息> 系统system级别信息。我们主要用到的是仓库级别和用户级别。对应配置信息地址分别是:.git/config,~/.gitconfig。

4.1 查看git配置信息

查看ladingjieniu-proj001这个仓库的git配置信息,直接cat .git/config文件,或者git config --local -l命令查看:

查看当前系统用户ladingjieniu的git配置信息, cat ~/.gitconfig,或者git config --global -l:

(base) ladingjieniu $ cat ~/.gitconfig

[user]

name = ladingjieniu

email = ladingjieniu@xxx.com

4.2 新增修改git配置信息

通过命令git config --local [参数名] [参数值]设置。比如:git config --local project.develop 'ladingjieniu66'

而修改用户级别的配置信息,通过git config --global 命令来实现配置。

五、常用命令实战详解

5.1 新建本地仓库

首先,如果本地已经有相关项目代码,需要创建本地git库,直接cd到对应目录。

输入命令:git init 回车。当前项目目录就变成了git本地库,你会发现有个.git 目录出现。

其次,如果是新建全新项目,通过mkdir [project-name]新建目录,然后再输入命令:git init 回车,当前目录变成本地库完成,随后可以在该目录下迭代代码文件。

最后,如果需要下载一个远程项目到本地,输入命令:git clone [url],则远程项目就被下载到本地,且本地当前目录变成了该项目本地git库。这里一般是通过https方式,比如【git clone https://gitee.com/arthas/arthas.git】。如果是ssh方式,需要在远程仓库配置本地电脑公钥才可以通过ssh方式clone远程仓库。

5.2 分支管理

查看本地分支、远程分支:git branch \ git branch -r。

切换分支:git checkout [branch]。

新建本地分支,并切换到新分支:git checkout -b [branch]。

删除本地分支:先切换到其他分支,然后执行git branch -d [branch-name] 。

删除远程分支:git push origin --delete [branch-name]。

5.3 代码管理

当我们在本地test3分支做了修改,需要合并到本地的master分支。可以通过:git merge 来合并。

在实际工作中,如果master分支代码远程已经有其他人做了修改提交。此时合并代码到master后,进行push操作,会出现代码冲突。此时git要求本地做好冲突修改后,作为一次新的commit 和push。

5.4 stash管理

当我们在本地分支做了一些需改,可能是未完全实现的迭代,此时有紧急需求,需要切换到另一个分支去处理,但是又不希望当前修改提交到本地库。我们可以通过git stash 命令,将当前修改,提交到堆栈中。后续在任意分支,可以通过git stash pop命令取回之前缓存的修改内容。

5.5 标签管理

当版本正常发布后,需要对版本库进行打标签封存发布。可以通过git tag相关命令去处理。

新建tag:git tag [标签名]

删除标签:git tag -d [标签名]

远程标签删除:git push origin --delete tag [标签名]

查看标签: git tag

本地标签打好后,进行远程推送:git push origin [标签名]。然后在远程仓库就可以看到对应tag清单。

5.6 版本回退

在Git中回退到上一个版本,用HEAD表示当前版本,head^表示上一个版本,比如:

git reset --hard HEAD^。

如果需要回退到指定版本,先通过git log命令查看对应版本的sha1值,然后通过git reset --hard 【sha1值版本号,前几位就可以】进行回退。

六、 命令集合

 #######分支管理
# 新建分支
$ git branch [新分支名]
# 切换到指定分支
$ git checkout [分支名]
# 新建分支,并切换新分支
$ git checkout -b [新分支名]
# 查看本地分支
$ git branch
# 查看远程分支
$ git branch -r
# 查看本地分支和远程分支
$ git branch -a
# 删除分支,需要先切换到其他分支,不能在本地分支删除本分支!
$ git branch -d [分支名]
# 删除远程分支
$ git push origin --delete [分支名]
$ git branch -dr [remote/branch]
# 新建分支,并指向到指定commit
$ git branch [branch] [commit]
# 新建分支,并与的远程分支建立关联关系
$ git branch --track [本地分支名] [远程分支名]
# 将指定分支内容合并到当前分支
$ git merge [指定分支名]#######配置管理
# 查看Git配置
$ git config --list
# 编辑Git配置文件,--global是用户级别,--local是本地仓库级别。
$ git config [--global] [--local]
# 设置用户信息,设置用户级别就很方便。用户名+邮箱,这里不能用=号。需要空格双引号
$ git config [--global] user.name "用户名xxx"
$ git config [--global] user.email "邮箱地址xxx"#######代码提交推送
# 添加相关修改文件或某个目录到暂存区index
$ git add [file1] [file2] [dir]...
# 添加当前目录的所有文件到暂存区
$ git add *
# 把之前add到暂存区修改内容,提交到本地仓库
$ git commit -m [message]
#  把指定暂存区文件,提交到本地仓库
$ git commit [file1] [file2] ... -m [message]
# 全部修改commit
$ git commit -am [message]
# 删除工作区workspace的文件,并且将这次删除放入暂存区index
$ git rm [file1] [file2] ...
# 提交修改到远程仓库
$ git push origin master
# 拉取远程更改到本地仓库默认自动合并,pull=fetch+merge命令。
$ git pull origin master#######git标签管理
# 查看全部tag
$ git tag
# 新建一个tag
$ git tag [tag名称]
# 删除本地tag
$ git tag -d [tag]
# 删除远程tag
$ git push origin :refs/tags/[tag名称]
# 查看tag信息
$ git show [tag]
# 提交指定tag
$ git push [remote] [tag]
# 提交所有tag
$ git push [remote] --tags
# 新建一个分支,指向某个tag
$ git checkout -b [branch] [tag]#######git回退回滚管理
# 回退到上一个版本
$ git reset --hard HEAD^
# 回退到指定版本,先通过git log查看对应commit sha1值
$ git reset --hard [commit 的sha1]#######git stash暂存管理
# 暂时将未提交的变化放到堆栈里
$ git stash
# 将堆栈里未提交内容恢复到当前分支
$ git stash pop#######其他命令,提交日志、差异查看
# 查看当前分支的历史提交记录
$ git log
# 查看commit历史,以及每次commit变更文件统计信息
$ git log --stat
# 查看过去3次提交
$ git log -3 --pretty --oneline
# 查看该项目用户提交信息统计,并排序
$ git shortlog -sn
# 查看指定文件历史差异提交情况
$ git log -p [file]
# 查看暂存区和工作区的差异
$ git diff
# 查看统计,当前用户写了多少代码
$ git diff --shortstat "@{0 day ago}"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/7534.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于模糊PID的孵化箱温度控制系统(论文+源码)

1系统方案设计 本课题为基于模糊PID的孵化箱温度控制系统,其以STM32最小系统与模糊PID控制器为控制核心。系统主要包括数据采集模块、处理器模块、电机控制模块。 数据采集模块由温度传感器构成,通过温度传感器感应温度变化,获得待处理的数据…

Arcgis国产化替代:Bigemap Pro正式发布

在数字化时代,数据如同新时代的石油,蕴含着巨大的价值。从商业决策到科研探索,从城市规划到环境监测,海量数据的高效处理、精准分析与直观可视化,已成为各行业突破发展瓶颈、实现转型升级的关键所在。历经十年精心打磨…

ThreeJS示例教程200+【目录】

Three.js 是一个强大的 JavaScript 库,旨在简化在网页上创建和展示3D图形的过程。它基于 WebGL 技术,但提供了比直接使用 WebGL 更易于使用的API,使得开发者无需深入了解 WebGL 的复杂细节就能创建出高质量的3D内容。 由于目前内容还不多,下面的内容暂时做一个占位。 文章目…

opengrok_使用技巧

Searchhttps://xrefandroid.com/android-15.0.0_r1/https://xrefandroid.com/android-15.0.0_r1/ 选择搜索的目录(工程) 手动在下拉框中选择,或者 使用下面三个快捷按钮进行选择或者取消选择。 输入搜索的条件 搜索域说明 域 fullSearc…

无人机如何自主侦察?UEAVAD:基于视觉的无人机主动目标探测与导航数据集

作者:Xinhua Jiang, Tianpeng Liu, Li Liu, Zhen Liu, and Yongxiang Liu 单位:国防科技大学电子科学学院 论文标题:UEVAVD: A Dataset for Developing UAV’s Eye View Active Object Detection 论文链接:https://arxiv.org/p…

【图文详解】lnmp架构搭建Discuz论坛

安装部署LNMP 系统及软件版本信息 软件名称版本nginx1.24.0mysql5.7.41php5.6.27安装nginx 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 关闭防火墙 systemctl stop firewalld &&a…

Ansible入门学习之基础元素介绍

一、Ansible目录结构介绍 1.通过rpm -ql ansible获取ansible所有文件存放的目录 有配置文件目录 /etc/ansible/ 执行文件目录 /usr/bin/ 其中 /etc/ansible/ 该文件目录的主要功能是 inventory主机信息配置,ansible工具功能配置。 ansible自身的配置文件…

git Bash通过SSH key 登录github的详细步骤

1 问题 通过在windows 终端中的通过git登录github 不再是通过密码登录了,需要本地生成一个密钥,配置到gihub中才能使用 2 步骤 (1)首先配置用户名和邮箱 git config --global user.name "用户名"git config --global…

矩阵的秩在机器学习中具有广泛的应用

矩阵的秩在机器学习中具有广泛的应用,主要体现在以下几个方面: 一、数据降维与特征提取 主成分分析(PCA): PCA是一种常用的数据降维技术,它通过寻找数据中的主成分(即最大方差方向&#xff09…

Windows Defender添加排除项无权限的解决方法

目录 起因Windows Defender添加排除项无权限通过管理员终端添加排除项管理员身份运行打开PowerShell添加/移除排除项的命令 起因 博主在打软件补丁时,遇到 Windows Defender 一直拦截并删除文件,而在 Windows Defender 中无权限访问排除项。尝试通过管理…

IDEA工具下载、配置和Tomcat配置

1. IDEA工具下载、配置 1.1. IDEA工具下载 1.1.1. 下载方式一 官方地址下载 1.1.2. 下载方式二 官方地址下载:https://www.jetbrains.com/idea/ 1.1.3. 注册账户 官网地址:https://account.jetbrains.com/login 1.1.4. JetBrains官方账号注册…

计算机网络之应用层

本文章目录结构出自于《王道计算机考研 计算机网络_哔哩哔哩_bilibili》 05 应用层 在网上看到其他人做了相关笔记,就不再多余写了,直接参考着学习吧。 王道考研 计算机网络笔记 第六章:应用层_王道考研 应用层 笔记-CSDN博客 DNS&#x…

微信小程序date picker的一些说明

微信小程序的picker是一个功能强大的组件&#xff0c;它可以是一个普通选择器&#xff0c;也可以是多项选择器&#xff0c;也可以是时间、日期、省市区选择器。 官方文档在这里 这里讲一下date picker的用法。 <view class"section"><view class"se…

Pyecharts图表交互功能提升

在数据可视化中&#xff0c;交互功能可以极大地提升用户体验&#xff0c;让用户能够更加深入地探索数据。Pyecharts 提供了多种强大的交互功能&#xff0c;本篇将重点介绍如何使用缩略轴组件、配置图例交互&#xff0c;让我们的数据可视化作品更加生动有趣。 一、缩略轴组件使…

奇怪的单词(快速扩张200个单词)

这是一些非常奇怪的单词&#xff1a; screw n.螺丝&#xff1b;螺丝钉 screwdriver n.起子&#xff0c;螺丝刀&#xff0c;改锥 copulation n.连接 copulate a.配合的 bonk n.撞击&#xff1b;猛击 v.轻击&#xff1b;碰撞ebony n.黑檀couple n.夫妇blonde n.金发女郎intimacy…

Ubuntu20.04 深度学习环境配置(持续完善)

文章目录 常用的一些命令安装 Anaconda创建conda虚拟环境查看虚拟环境大小 安装显卡驱动安装CUDA安装cuDNN官方仓库安装 cuDNN安装 cuDNN 库验证 cuDNN 安装确认 CUDA 和 cuDNN 是否匹配&#xff1a; TensorRT下载 TensorRT安装 TensorRT 本地仓库配置 GPG 签名密钥安装 Tensor…

Android多语言开发自动化生成工具

在做 Android 开发的过程中&#xff0c;经常会遇到多语言开发的场景&#xff0c;尤其在车载项目中&#xff0c;多语言开发更为常见。对应多语言开发&#xff0c;通常都是在中文版本的基础上开发其他国家语言&#xff0c;这里我们会拿到中-外语言对照表&#xff0c;这里的工作难…

数据结构——堆(C语言)

基本概念&#xff1a; 1、完全二叉树&#xff1a;若二叉树的深度为h&#xff0c;则除第h层外&#xff0c;其他层的结点全部达到最大值&#xff0c;且第h层的所有结点都集中在左子树。 2、满二叉树&#xff1a;满二叉树是一种特殊的的完全二叉树&#xff0c;所有层的结点都是最…

const的用法

文章目录 一、C和C中const修饰变量的区别二、const和一级指针的结合const修饰的量常出现的错误是:const和一级指针的结合总结&#xff1a;const和指针的类型转换公式 三、const和二级指针的结合 一、C和C中const修饰变量的区别 C中&#xff1a;const必须初始化&#xff0c;叫常…

机器学习-线性回归(参数估计之经验风险最小化)

给定一组包含 &#x1d441; 个训练样本的训练集 我们希望能够 学习一个最优的线性回归的模型参数 &#x1d498; 现在我们来介绍线性回归的一种模型参数估计方法&#xff1a;经验风险最小化。 我们前面说过&#xff0c;对于标签 &#x1d466; 和模型输出都为连续的实数值&…