代码管理工具-Git基础介绍及常用技巧

【代码管理的必备工具:Git的基本概念与操作详解】 不知道你工作或学习时,有没有遇到这样的情况:我们在编写各种⽂档时,为了防止⽂档丢失,更改失误,失误后能恢复到原来的版本,不得不复制出⼀个副本,比如:“报告-v1”“报告-v2”“报告-v3”“报告-确定版”“报告-最终版”“报告-究极进化版”...每个版本有各自的内容,但最终会只有⼀份报告需要被我们使⽤。 阅读详情

🚀 优质资源分享 🚀

学习路线指引(点击解锁)知识定位人群定位
🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
💛Python量化交易实战💛入门级手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

目录* Git起源

**前言:**本文主要介绍git的原理、使用和一些技巧,目的在于使读者对git的了解不仅仅局限于简单的使用push、pull命令,而要做到知其然且知其所以然。当然,本文并不会深入去探讨诸如git的实现原理之类的深层次东西,毕竟它只是一个代码管理工具罢了,作为使用者,我们只要达到真正熟练使用的地步就够了,至于更深层次的东西,诸位有兴趣的可以自行学习研究。
另外,本文分支相关图片取自learngitbranching,这是个用游戏的方式,图文结合学习git分支的网站,相当nice,推荐大家去完整过一遍,相信对于git的理解会更上一层楼。

Git起源

git是由Linux的作者Linus花两周时间写出的分布式版本控制软件。在这之前,Linux社区使用BitKeeper作为版本控制系统,但是由于社区中有人试图破解BitKeeper的协议,这惹恼了BitKeeper的东家BitMover公司,于是BitMover决定收回linux社区的免费使用权。

在这样的背景下,Linus花了两周时间写出了git,在一个月内替换了BitKeeper,作为Linux的版本控制工具,并在后面不断完善,最终成为了现在代码版本控制的首选

基本概念

三种工作域:

  • git目录(git direcdtory):即仓库(Repository),保存项目中所有版本和相关信息,是git存放数据和信息的地方
  • 工作目录(work directory): 是对应项目的某个版本的文件集合,对应从 git 目录中解压出来的供用户进行操作和修改的数据和信息
  • 暂存目录(staging area):用于记录下次commit时需要保存的文件列表

三种文件状态:

  • committed:已提交状态,表示数据文件已经被保存至本地数据仓库中。
  • modified:修改状态,表示文件已被修改,但是尚未被提交(保存)。
  • staged:暂存状态,表示是被标记了的被修改文件,在下次提交时会将所有标记过的修改保存。
    另外新增的文件为untracked file,未在git管理范围内,需要先通过git add添加到暂存目录,然后其状态会变为staged
    git
    如图所示,git分为远端和本地。远程远程服务器存储了仓库信息,而本地则是三种工作域都有。

Branch、HEAD和Commit tree

本地提交代码到远端的一般流程:

  1. git add,将修改保存到暂存区(stage area)
  2. git commit,将暂存区中的文件推送到本地分支,本地仓库更新
  3. git push,将本地仓库的更改推送到远程仓库,远程仓库更新

可以看到,想要更新代码,commit是必不可少的。每次commit都会生成一个工作目录的快照(前提是有修改),在git中,这些commit的快照数据使用树(tree)结构来管理,称为提交树(Commit Tree)或者工作树(Work Tree)。

Git 的分支(Branch),其实本质上仅仅是指向提交对象的可变指针。分支是git的核心所在,因为分支的存在,工作树才是工作树而不是工作"线"。可以将每个分支看作工作树的分叉,项目可以在不同分支上并行开发,然后在合适的时机又可以合并在一起,这都是分支的作用。

HEAD表示当前所处提交位置。通常来说,HEAD是指向某个分支的,当然也可以手动切换将HEAD指向工作树中的任意commit(这种情况称为HEAD分离)。
Branch
图中一共有c0-c4四个提交,main、bugFix和feature三个分支,三个分支分别指向C1、C3、C4三个提交,HEAD处于分离状态,指向C2
了解了以上的基础概念以后,让我们来探讨一下git分支相关内容。

Git分支

之前说了,分支的存在是为了并行开发,每一个分支都会指向一个具体的提交。需要多人协作的项目离不开对分支的操作。
通常来说,新建一个项目时默认分支为master,可以根据需要新建develop、release等分支。

下面介绍一些常见的git分支相关命令

  • git commit。以当前提交为父节点生成新的子提交节点,并且当前HEAD/Branch会指向新生成的节点
  • git branch。单独使用时查看所有分支,后面加一个branchName表示在当前节点创建名为branchName的新分支,git checkout -b branchName也能达到相同的效果,区别在于后者会将HEAD指向新创建的分支
  • git checkout BRANCH/COMMIT。切换到对应的分支或者提交节点,之前有提过,直接切换到提交节点就是HEAD分离状态
  • git merge BRANCH/COMMIT。将当前提交节点和指定提交节点合并并生成新的提交节点,新生成的节点有两个父节点。
  • git rebase BRANCH/COMMIT。将当前分支所在节点及之前的节点中有且在另一分支/节点中所没有的节点全部按序复制一份到目标分支,然后将当前BRANCH/HEAD移到目标位置。
  • git reset COMMIT.撤销commit到指定提交,与git branch -f CURRENT_COMMIT COMMIT效果是一样的。但是这种更改只能在本地体现,是不能同步到远程的
  • git revert COMMIT。要想撤销能同步到远程,就得用到git revert COMMIT。此命令会通过新生成提交节点的方式撤销指定的提交节点
  • git cherry-pick COMMIT_1 COMMIT_2 … 。选取指定的一些节点按序rebase到当前分支

git merge 和 git rebase 的区别和抉择

git rebase:

  • 优点:提交树呈线性,干净简单
  • 缺点:修改了提交树的历史

git merge:

  • 优点:提交记录顺序正确,不会造成迷惑
  • 缺点:多分支时显得看起来很复杂

两者如何抉择,该使用哪条命令来合并,这取决于用户的习惯,如果对提交历史顺序的正确性有要求,就用git merge,否则使用git rebase

与远程仓库的交互

通常来说,开发的一般流程是在远程建立一个仓库,然后开发人员各自在本地clone仓库,新建自己的分支进行开发,开发完成后再推送到远程分支,再合并到主分支。
当我们clone远程仓库到本地时,会在本地复制一份仓库信息和工作目录
Clone
注意,本地多了一个origin/main的分支,这个分支叫做远程分支,它反映了你最近一次操作远程仓库的状态。远程分支比较特殊,不能像普通分支一样通过checkout、branch等命令直接操控,必须通过pull、push、fetch等命令与远端同步。

下面介绍一些常见的与远程仓库交互的命令:

  • git clone Repository。将远程仓库克隆到本地,可通过git clone -b branchName Repository命令指定克隆的分支。
  • git fetch,下载远程分支的最新状态到本地,只会更新本地的远程分支,不会更改HEAD和本地分支远程
    有更新
    Clone1
    使用 git fetch后
    Clone2
  • git pull。可以视作 git fetch + git merge 的缩写。存在下列常见情况,远程分支有人提交了更新,自己本地也提交了更新,这时候就需要先拉取最新的代码
    使用git pull,第一步是下载最新分支更改,即git fetch
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pZyFYDMk-1651034478415)(https://img2022.cnblogs.com/blog/1491971/202204/1491971-20220427100530923-1663855047.png]
    第二步合并当前分支与远程分支,即git merge o/main
    git pull2
  • git push。将当前分支的本地更改推送到远程分支。git push会更新本地的远程分支,并且将修改同步到远端对应的分支
    git push1
    使用git push推送
    git push2

关于一些实际开发场景的问题和解决方式

前提:团队目前使用develop分支作为本地测试环境,Release分支作为代码备份,通过手动部署的方式部署到真实环境,也就是说,每次开发完成以后会将develop分支合到release分支。

问题:在某次开发后develop最新提交为C2,但是C2忘了合并到release分支,然后又另外创建了个分支nas开发nas相关功能C3,现在nas已经合并到develop分支。这时候nas相关功能由于存在一些问题,需要回滚,请问这时候应该怎么做?
Condition

解决方案:使用git revert C3回滚
Resolve1

在回滚以后另外新建分支开发新功能C4,之后又想将nas分支的功能重新合并到develop,应该怎么做?
Resolve2

解决方案: git revert C3’
Resolve3

蓝桥杯嵌入式(基础教程)STM32G431RBT6——创建工程以及点灯 首先选择正确的芯片类型:STM32G431RBT6工程的创建主要有配置时钟以及烧录的方式。在配置好之后需要对时钟进行配置,由于蓝桥杯的外部晶振是24MHz因此需要对时钟树进行相应的配置。第一步先点击时钟配置之后就可以对时钟进行相应的配置了最后一步,需要对工程起一个名字,并且要选择KEIL做为其相应的软件之后再需要再生成代码那里进行相应的控制。当然这样根据生成的工程不能直接使用会有一个报错,所以需要添加一个启动文件。这个启动文件可以在官方的LCD文件夹下复制到自己的工程中。 阅读详情

相关推荐

更多 LSTM 变种——应用于 CMAPSS 数据集

本文并模型介绍,只是把一些比较火的技术,像双向注意力机制,自注意力机制这样的比较火的内容,简单的和LSTM堆叠,结果发现效果都不如最基础的,这里作者将本人代码及实现结果,进行展示,给各位想更改LSTM的朋友一些。

2301_77491330的博客 1766

GitLabCI/CD: 内置仓库轻松实现代码基线与制品关联

将制品上传到第三方仓库以Nexus为例, 通过调用NexusAPI完成制品的上传。.pushartifact: tags: -build stage:pushartif...

DevOps持续集成的博客 1436

攻克Windows平台3DGS复现:从环境配置到可视化实战全记录

本文详细记录了在Windows平台成功复现3D Gaussian Splatting(3DGS)的完整流程,涵盖从环境配置、依赖安装、数据准备到模型训练与可视化的全步骤。重点解决了Windows下CUDA版本匹配、Visual Studio编译及SIBR_viewers可视化工具部署等核心难题,为开发者提供了一份详实的避坑指南与实战手册。

weixin_28839699的博客 253

程序员必备之——代码托管工具 git

关于git的使用介绍

m0_62348004的博客 7120

从零搭建Arduino仿真开发环境:SimulIDE与IDE配置全攻略

本文详细介绍了如何从零搭建Arduino仿真开发环境,涵盖SimulIDE与Arduino IDE的配置全流程。通过仿真模拟环境,开发者可以零成本试错,快速验证电路设计和程序逻辑,特别适合初学者和便携开发需求。文章提供了软件安装、环境配置、项目实战及问题排查的完整指南,帮助读者高效掌握Arduino仿真开发技巧。

weixin_29284657的博客 524

【Godot】实现对话系统

在 Godot 中实现对话系统(Dialogue System)是游戏开发中的常见需求。Godot本身自带的的灵活性和轻量级脚本语言 GDScript 使得实现对话系统变得相对简单。以下是实现一个基础对话系统的示例。(语言为GDScript但高亮选择Python因为类似)通过 Godot 和 GDScript,我们可以给我们的游戏实现一个对话系统。从简单的文本显示到复杂的分支对话,Godot 提供了足够的灵活性来满足我们的需求。如果需要更高级的功能,可以尝试使用现成的插件如 Dialogic。

Octopus2077的博客 2525

Git代码管理工具

一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引。由于你的本地 Git 仓库和 GitHub 仓库之间的传输是通过SSH加密的,所以我们需要配置验证信息。工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。Git 分支实际上是指向更改快照的指针。就是你在电脑里能看到的目录。

BSY丶的博客 1749

Win10文件夹只读属性自动恢复?彻底解决方法解析

Win10文件夹只读属性自动恢复?彻底解决方法解析在Windows系统使用过程中,文件权限管理常会遇到棘手问题。最近多位用户反馈:取消文件夹只读属性后,系统却自动恢复该设置,导致无法正常复制或修改文件。本文将深入分析该现象的产生原因,并提供多种解决方案,帮助开发者彻底摆脱权限困扰。

mmoo_python的博客 7535

Git工具

Git 是一个分布式版本控制工具,通常用来对软件开发过程中的源代码文件进行管理。通过Git 仓库来存储和管理这些文件,Git 仓库分为两种:本地仓库:开发人员自己电脑上的 Git 仓库远程仓库:远程服务器上的 Git 仓库commit:提交,将本地文件和版本信息保存到本地仓库push:推送,将本地仓库文件和版本信息上传到远程仓库pull:拉取,将远程仓库文件和版本信息下载到本地仓库。

2401_85217463的博客 2532

基于DRU-HVDC的构网型海上风电场环流机理仿真复现

本文介绍了基于DRU-HVDC的构网型海上风电场环流机理仿真模型的构建方法。主要内容包括: 完整的Simulink模型结构,包含主模型文件GFM_DRU_Main.slx和配置脚本GFM_DRU_Setup.m 系统参数设置,包括基础频率(20Hz)、电压基准值(690V)、功率基准值(2MVA)等 四种仿真场景配置:电压不平衡、相位不平衡、阻抗不平衡和频率不平衡 风力发电机(WT)子系统的详细构建步骤,包含电压源、输出阻抗和测量模块 变压器和DRU整流器的参数设置 该模型可用于研究构网型风电场的环流机理。

huanghm88的专栏 262

C#实战大华智能安防系统:从SDK封装到视频流与智能报警的全链路落地

本文将介绍C#集成大华SDK开发安防系统的实战经验,重点解决多路视频预览卡顿和报警延迟问题。文章通过三层架构设计(SDK封装层、业务服务层、应用层)实现解耦,详细分析线程安全封装、高效解码显示和智能事件联动等核心技术。针对16路摄像头同时预览时CPU占用率过高的问题,提出使用子码流拉流与异步解码的优化方案,并总结8个常见开发陷阱的解决方案。文中还提供了大华智能安防系统的完整架构图,展示从设备层到应用层的交互流程,特别强调业务服务层中视频流服务和智能报警服务的核心功能设计。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 432

Git常用命令

这份常用Git命令大全涵盖了从初始化仓库、配置用户信息、基本操作到高级操作、别名设置以及常用技巧和最佳实践的各类Git命令和操作。掌握这些命令和技巧将极大提升在版本控制和代码管理方面的效率与能力。注:部分高级命令和操作需要更深入的理解和谨慎使用,尤其是涉及历史重写(如git rebase等)。建议在执行这些操作前,备份重要数据或在安全的环境中进行测试。

梅见十柒的博客 636

深度学习实战42-基于大模型开发MathGPT的原理介绍,让数学问题智能解答变为可能

大家好,我是微学AI,今天给大家介绍一下深度学习实战42-基于大模型开发MathGPT的原理介绍,让数学问题智能解答变为可能。在去年ChatGPT的发布后,各种国内外的大语言模型层出不穷涌现,但是大家都知道现在的模型的诟病的数学能力不足,就算是简单的数学题都可能算错,今天我就来给大家引入MathGPT的模型,用来解决GPT解决数学问题,对于简单的初中数学高中数学都可以解决,让数学问题精准答题得到实现。

微学AI的博客 1653

GIT代码管理规范文档

本文档旨在规范公司项目的Git代码管理流程,确保团队协作高效、代码质量可控、版本历史清晰,降低因代码管理不规范带来的风险和成本。

weixin_40767138的博客 1214

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

从入门到精通:Git高效使用指南

在软件开发的广袤天地中,Git 无疑是一颗璀璨的明星,它的出现彻底改变了代码管理和团队协作的方式。通过这篇文章,我们深入探索了 Git 的世界,从基础的安装配置,到核心概念的理解,再到常用命令的熟练运用,以及高级技巧的掌握,最后还解决了常见问题,相信大家已经对 Git 有了全面而深入的认识。Git 的重要性不言而喻,它不仅能够精确地跟踪文件的每一次变化,让我们随时回溯到项目的任意历史版本,确保代码的稳定性和可维护性;

2302_80643506的博客 841

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Git的常用撤销技巧与解决冲突方法

Git的常用撤销技巧与解决冲突方法

w36680130的博客 197

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

git版本管理操作

一、Git代码管理工具 开始的时候,代码管理工具基本上都是使用SVN来管理的。但自从 git 出现之后,越来越多的使用 git 来管理代码,因此熟知常用的 git 指令是很有必要的。常用的 git 指令如下: git clone remote ----- 将远程 git 库代码克隆到本地 git add ---- 将文件暂存 git commit ---- 将文件提交到本地 git commit -a ---- 执行两步操作,先暂存修改、删除文件,...

ZHANGFANG900703的专栏 292

搞懂Git版本控制

聊聊学习Git哪些事 现在回想起来,其实我接触Git的时候是在我大一的时候,我的表哥带我入门的。当时因为需要做一个项目,所以他教我如何使用Git将写好的代码推送到GitHub上,然后再从远程仓库拉到本地。起初因为没有接触过Git,觉得这玩意很难学,又是一大堆命令需要记忆,在他教我的时候内心是抵触的,当时觉得为什么不把写好的代码发送给我呢?你是否也有过这样的疑问呢? 学习Git的时候,因为没有和...

FengyangCoder的博客 1425

Git 提交规范 Git常用命令

commit描述: 代码的提交应该清晰明了,说明本次修改的主要内容 commit类型: feat:新功能(feature) fix:修补bug docs:文档(documentation) style: 格式(不影响代码运行的变动) refactor:重构(即不是新增功能,也不是修改bug的代码变动) test:增加测试 perf: 性能优化 chore:构建过程或辅助工具的变动 commit提交注事项: 单个功能开发尽量开发一个完成功能后在进行commit 多功能同时开发,切换分支,可以使用git s

༺隆冬飘落の初霁༻的博客 1199

Idea常用技巧总结

输入最终模板(右边var1、var2确保输入一个参数回车后跳到另一参数输入) public static final String。输入最终模板(右边var1、var2确保输入一个参数回车后跳到另一参数输入) public static final int。注:这里的快捷键是自己定义的,并非大家的都一样,可以通过findAction查找相应的快捷键。findaction→输入live templates→点击右上角“+”点击define→勾选java。点击define→勾选java。Idea常用技巧总结。

weixin_45640168的博客 639

【GIT】10 个节省时间和改善工作流的 Git 技巧

git push --force 是一种具有破坏性且危险的操作,因为它无条件生效,并且会破坏其他提交者已经推送的所有 commit。不过可以用一条新的 commit 信息修订现有的 commit,这会覆盖原始 commit,因此请勿在已推送的 commit 中使用它。许多 git 操作可能具有破坏性,例如, git clean -f 将删除所有未跟踪的文件,而且无法恢复。在它的帮助下,可以返回当前状态的索引,并能在稍后应用已储藏的更改。默认情况下,仅储藏当前跟踪文件中的更改,新文件将被忽略。

Robin的博客 955

GitBash:Windows上强大的Git工具,安装配置与使用技巧全解析

GitBash作为Windows系统上运行Git命令的强大工具,为开发者提供了接近Linux环境的命令行体验。它不仅能够执行Git版本控制操作,还支持常见的Unix命令

qq_63723294的博客 403

Git 和 Repo常用命令

目录初始环境配置常用的命令gitignore规则差异删除提交记录复位远程仓库blamecheckoutpushgit clean的用法用Git打包文件git rebase用法,用于修改历史提交记录修改commit的提交顺序搜索commit查看一个函数的进化历史更换commit的作者git ignoregit worktree配置git emailrepo 常用命令tig使用不同的视图Shift ...

pengdonglin137的专栏 145

面试中的那些 Git 问题 - 基础部分

点击上方“iOS开发”,选择“置顶公众号” 关键时刻,第一时间送达! 团队协作能力一直是我们招聘开发人员的重要考核指标之一。而考核这个能力的原因很简单:一般公司都不会只有一个开发…而一旦涉及多人协作开发,良好的协作能力和习惯能显著提高整个团队的开发效率。Time is money! 说到协作,面试中当然就会聊到开发人员日常最需要协作的事情,代码协作。因

iOS_开发 1279

Git常用命令简介

一: Git是什么? Git是目前世界上最先进的分布式版本控制系统, 可以有效地记录每个文件地修改历史,可以回退到任意版本,只要你愿意。 Git 三大区 工作区(Working Directory) : 开发者本地修改文件 暂存区(Stage): 暂时存放工作区修改的文件 远程仓库(Remote): 开发者讲暂存区的文件commit后,push到远程仓库 二:git常用命令 $ git init...

weixin_38736287的博客 269

Git基本常用命令

Git是目前世界上最先进的分布式版本控制系统。 工作区:就是你在电脑上看到的目录,比如目录下testgit里的文件(.git隐藏目录版本库除外)。或者以后需要再新建的目录文件等等都属于工作区范畴。 版本库(Repository):工作区有一个隐藏目录.git,这个不属于工作区,这是版本库。其中版本库里面存了很多东西,其中最重要的就是stage(暂存区),还有Git为我们自动创建了第一个分支mast...

小豆花儿的学习之路 176
上一篇: ASP.NET Web 应用 Docker踩坑历程
下一篇: AsyncLocal<T>在链路追踪中的应用
pythonxxoo
博客等级 码龄5年 337粉丝 670原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值