网易工程师 Ruheng 一文教你轻松学会 Git

手把手教你用Ollama & AnythingLLM搭建AI知识库,无需编程,跟着做就行! 本地运行大模型耗资源,需要选择较小的模型作为基础模型。在终端中运行时可能会出现 CUDA 错误,表示显存不足,导致提供的端口失效。中文支持不够完善。\3. 文中提到的技术软件工具有:Ollama、Chatbox、Open WebUI、向量数据库、嵌入模型、本地模型 Gemma、AnythingLLM。 阅读详情

在日常工作中,经常会用到Git操作。但是对于新人来讲,刚上来对Git很陌生,操作起来也很懵逼。本篇文章主要针对刚开始接触Git的新人,理解Git的基本原理,掌握常用的一些命令。

Git工作流程

640?wx_fmt=png

以上包括一些简单而常用的命令,但是先不关心这些,先来了解下面这4个专有名词。

  • Workspace:工作区

  • Index / Stage:暂存区

  • Repository:仓库区(或本地仓库)

  • Remote:远程仓库

工作区

程序员进行开发改动的地方,是你当前看到的,也是最新的。

平常我们开发就是拷贝远程仓库中的一个分支,基于该分支进行开发。在开发过程中就是对工作区的操作。

暂存区

.git目录下的index文件, 暂存区会记录 git add添加文件的相关信息(文件名、大小、timestamp...),不保存文件实体, 通过id指向每个文件实体。可以使用 git status查看暂存区的状态。暂存区标记了你当前工作区中,哪些内容是被git管理的。

当你完成某个需求或功能后需要提交到远程仓库,那么第一步就是通过 git add先提交到暂存区,被git管理。

本地仓库

保存了对象被提交 过的各个版本,比起工作区和暂存区的内容,它要更旧一些。

git commit后同步index的目录树到本地仓库,方便从下一步通过 git push同步本地仓库与远程仓库的同步。

远程仓库

远程仓库的内容可能被分布在多个地点的处于协作关系的本地仓库修改,因此它可能与本地仓库同步,也可能不同步,但是它的内容是最旧的。

小结

  1. 任何对象都是在工作区中诞生和被修改;

  2. 任何修改都是从进入index区才开始被版本控制;

  3. 只有把修改提交到本地仓库,该修改才能在仓库中留下痕迹;

  4. 与协作者分享本地的修改,可以把它们push到远程仓库来共享。

下面这幅图更加直接阐述了四个区域之间的关系,可能有些命令不太清楚,没关系,下部分会详细介绍。

640?wx_fmt=png

常用Git命令

640?wx_fmt=png

网上找了个图,别人整理的一张图,很全很好,借来用下。下面详细解释一些常用命令。

HEAD

640?wx_fmt=png

在掌握具体命令前,先理解下HEAD。

HEAD,它始终指向当前所处分支的最新的提交点。你所处的分支变化了,或者产生了新的提交点,HEAD就会跟着改变。

add

640?wx_fmt=png

add相关命令很简单,主要实现将工作区修改的内容提交到暂存区,交由git管理。

640?wx_fmt=png

commit

640?wx_fmt=png

commit相关命令也很简单,主要实现将暂存区的内容提交到本地仓库,并使得当前分支的HEAD向后移动一个提交点。

640?wx_fmt=png

branch

640?wx_fmt=png

涉及到协作,自然会涉及到分支,关于分支,大概有展示分支,切换分支,创建分支,删除分支这四种操作。

640?wx_fmt=png

关于分支的操作虽然比较多,但都比较简单好记。

merge

640?wx_fmt=png

merge命令把不同的分支合并起来。如上图,在实际开放中,我们可能从master分支中切出一个分支,然后进行开发完成需求,中间经过R3,R4,R5的commit记录,最后开发完成需要合入master中,这便用到了merge。

640?wx_fmt=png

一般在merge之后,会出现conflict,需要针对冲突情况,手动解除冲突。主要是因为两个用户修改了同一文件的同一块区域。如下图所示,需要手动解除。

640?wx_fmt=png

rebase

640?wx_fmt=png

rebase又称为衍合,是合并的另外一种选择。

在开始阶段,我们处于new分支上,执行 git rebase dev,那么new分支上新的commit都在master分支上重演一遍,最后checkout切换回到new分支。这一点与merge是一样的,合并前后所处的分支并没有改变。 git rebase dev,通俗的解释就是new分支想站在dev的肩膀上继续下去。rebase也需要手动解决冲突。

rebase与merge的区别

现在我们有这样的两个分支,test和master,提交如下:

      D---E test	
     /	
A---B---C---F master

在master执行 git merge test,然后会得到如下结果:

      D--------E	
     /          \	
A---B---C---F----G   test, master

在master执行 git rebase test,然后得到如下结果:

A---B---D---E---C'---F'   test, master

可以看到,merge操作会生成一个新的节点,之前的提交分开显示。而rebase操作不会生成新的节点,是将两个分支融合成一个线性的提交。

如果你想要一个干净的,没有merge commit的线性历史树,那么你应该选择git rebase 如果你想保留完整的历史记录,并且想要避免重写commit history的风险,你应该选择使用git merge

reset

640?wx_fmt=png

reset命令把当前分支指向另一个位置,并且相应的变动工作区和暂存区。

640?wx_fmt=png

revert

640?wx_fmt=png

git revert用一个新提交来消除一个历史提交所做的任何修改。

revert与reset的区别

640?wx_fmt=png

  • git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。

  • 在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,减少冲突。但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入,产生很多冲突。关于这一点,不太理解的可以看这篇文章。

  • git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。

push

上传本地仓库分支到远程仓库分支,实现同步。

640?wx_fmt=png

其他命令

640?wx_fmt=png

本文作者 Ruheng 是来自网易的 Android 工程师,点击「阅读原文」,给作者点个赞?

640?wx_fmt=png

关注「码洞」,老钱带你码出个未来

ssm框架搭建 这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载 立即下载

相关推荐

Windows 10/11 注册表 ProfileImagePath 误改修复:3步恢复用户登录与数据安全

本文详细介绍了Windows 10/11系统中因误改注册表ProfileImagePath键值导致用户无法登录的修复方法。通过3个关键步骤,包括定位SID、安全修复注册表项及验证处理,帮助用户恢复登录并保障数据安全。特别强调了操作顺序的重要性以避免数据丢失,适用于各类Windows用户账户登录错误的紧急处理。

chuoshao2508的博客 403

【Git】Git常用命令

git init在本地新建一个repo,进入一个项目目录,执行git init,会初始化一个repo,并在当前文件夹下创建一个.git文件夹. git clone获取一个url对应的远程Git repo, 创建一个local copy.一般的格式是git clone [url].clone下来的repo会以url最后一个斜线后面的名称...

猫巳的博客 679

快速理解OSI七层模型(举例理解,数据传输过程,深入理解OSI七层模型)

我们需要了解互联网的本质是一系列的网络协议,这个协议就叫做OSI协议(开放系统互联(Open System Interconnection)),它是由ISO(国际标准化组织)定义的。 需要注意,随着时代的发展,OSI已经被TCP/IP 4层模型淘汰,在当今世界上并没有大规模的使用。 那么对于OSI,人们按照功能不同,分工不同,人为的将OSI的分为七层。实际上这七层是并不存在的,也就是说没有这些概念,而我们今天提到的七层概念,只是人为的划分而已。目的只是为了让大家更好地理解这些都是用来做什么的。

CN_TangZheng的博客 3万+

Git有这一篇就够了

在日常工作中,经常会用到Git操作。但是对于新人来讲,刚上来对Git很陌生,操作起来也很懵逼。本篇文章主要针对刚开始接触Git的新人,理解Git的基本原理,掌握常用的一些命令。 一、Git工作流程 以上包括一些简单而常用的命令,但是先不关心这些,先来了解下面这4个专有名词。 Workspace:工作区Index / Stage:暂存区Repository:仓库区(或本地仓

perry_Fan 4940

永磁同步电机定子槽型设计实战:从梨形槽到矩形槽的NVH优化之路

本文深入探讨了永磁同步电机定子槽型设计在NVH优化中的关键作用,对比了梨形槽与矩形槽的性能差异。通过Ansys Maxwell仿真和实际案例,揭示了矩形槽在提升槽满率、降低电磁噪声方面的优势,并总结了五大设计黄金法则,为电机设计工程师提供了实用指导。

weixin_28740299的博客 493

Windows下用RKDevTool解包update.img的完整流程(含常见错误排查)

本文详细介绍了在Windows系统下使用RKDevTool工具解包update.img固件的完整流程。从工具准备、环境搭建到逐步解包操作,重点解析了输出文件结构,并提供了修改分区后重新打包的实战方法。文章还针对解包失败、打包错误等常见问题提供了详细的排查与解决方案,旨在帮助嵌入式开发者和爱好者高效完成固件分析与定制工作。

aa123的博客 716

Git 实现原理,你真的了解吗?

诞生的原因最初版本的git 诞生于Linus和他的团队在开发Linux内核的过程中。一开始,Linus和他的团队选用的版本控制工具是BitKeeper(一款非开源,但是有条件免费的产品)...

程序IT圈 987

气象大模型光伏功率预测中的应用:从短期,超短期,中长期的实现与开源代码详解

本文详细介绍了基于大模型的光伏功率预测方法,涵盖超短期(15分钟-1小时)、短期(1-6小时)和中长期(1天-1周)预测。文章首先讨论了数据准备与预处理,包括历史功率、气象、天文和电站特性数据的收集与特征工程。随后,针对不同预测需求,提出了多种深度学习模型:超短期预测采用1DCNN-LSTM混合模型,短期预测使用Transformer模型,中长期预测则通过多尺度特征提取模型和概率预测方法处理不确定性。文章还提供了模型训练、评估、部署和优化的完整流程,并开源了代码实现。未来研究方向包括结合数值天气预报、开发时

专注AI大模型,软件混淆,授权 1572

amend用法 git 信息_看了这篇,我确定你已经彻底搞懂Git了

版本控制版本控制就是记录项目文件的历史变化。它为我们查阅日志,回退,协作等方面提供了有力的帮助。版本控制一般分为集中化版本控制和分布式版本控制。集中化主要的版本数据都保存服务端。分布式版本数据分散在多端。GitGit属于分布式版本控制,也是现在比较流行的一种版本管理工具。Git项目有三个区块:工作区 / 暂存区 / 版本库工作区存放从版本库提取出来的文件,供我们编辑修改;暂存区保存了下一次要提交的...

weixin_39621819的博客 1105

SAP项目中 Waterfall vs Agile 的深度对比分析背景:方法论的演进SAP项目实施方法论经历了显著的代际更替。早期以 ASAP(Accelerated SAP) 为代表,采用经典瀑

本文对比分析了SAP项目实施中瀑布模型(ASAP)与敏捷方法(SAP Activate)的核心差异。瀑布模型采用线性流程,需求固定但变更成本高;敏捷方法则通过迭代开发实现动态调整,强调最佳实践和用户持续参与。文章指出,SAP系统的复杂性使纯粹敏捷难以实施,需在标准化与定制化间取得平衡。最终建议根据项目特性选择方法论:稳定需求适用瀑布模型,变化频繁则推荐敏捷,而SAP Activate本质上是两者的结构化融合,代表未来趋势。关键在于匹配项目实际需求,而非盲目追随方法论潮流。

金牌架构师 345

基于Simulink的电机轴电压与轴电流抑制仿真

本文带你完成了电机轴电压与轴电流抑制的Simulink仿真,实现了:✅ 揭示了共模电压 → 寄生电容 → 轴电压 → 轴承电蚀的完整链路✅ 搭建了含寄生参数的高频电机等效模型共模电压最小化PWM(源头抑制)dv/dt滤波器(路径阻断)轴接地(终端泄放) ✅ 通过仿真验证了轴电压从68 V降至<3 V的显著效果 ✅ 为高可靠性电机系统提供低成本、高效益的轴承保护方案。

amy_mhd的博客 163

敏捷团队Git分支版本管理策略| TBD++ Flow

​简介 随着Git的普及,为了更高效地进行团队协作开发,人们通过经验总结研究出了几套适用于各种团队和项目的分支管理策略,上篇文章我们讲解了 Git Flow 代码版本管理策略,它对版本控制较为严格,主要适合开发团队规模较大、开发周期较长,可达几周至几个月的项目,同时,文章提供了版本管理方案图及必要的讲解。 接下来将介绍Git 分支管理策略:TBD++ Flow,该版本管理策略整合了其他策略的优点,适合敏捷开发团队,开发周期长、快速迭代均适用。先看一下工作流图。 TBD++ Flow 工作流图 TBD++

技术管理修行 2583

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

git合并分支时,忽略某个文件或者某个文件下的文件

合并时的坑 会遇到修改了,但是不成功的原因: gitattribute方法生效是有条件的,跟文件的修改顺序有关系,只有先修改的往后来修改的合并的时候才会生效 参考地址:https://blog.youkuaiyun.com/dunegao/article/details/103122360?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control&depth_1-utm_source=di

这里是迷阵的博客耶 3401

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

git merge 时忽略配置文件文件

日常开发时经常会遇到某些配置文件,不希望在branch merge时被包含在内。 怎么处理?步骤如下: 步骤一:定义一个虚拟的合并策略,全局配置不依赖任何项目任何分支 git config --global merge.ours.driver true 步骤二:在你项目中根目录(与.gitignore同级)添加一个配置文件.gitattributes 注意这个".gitattributes"在必须要放到merge的目标branch中,而不是源branch。 步骤三:在.gitattri

rav009的专栏 2208

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

git和GitHub IDEA拒绝合并git项目

git和GitHub git是一个版本控制工具 github是一个用git做版本控制的项目托管平台。 使用git上传项目到github 一、创建github repository(仓库) 二、安装git客户端 https://git-scm.com/ 官网下载,安装,一路默认安装完成。 绑定用户:打开git-bash.exe,因为Git是分布式版本控制系统,所以需要填写用户名...

小沐的博客 697

git分支合并时忽略特定文件

分支合并忽略特定文件步骤 在项目根目录下新建文件.gitattributes,然后文件中写入需要忽略的文件名 + merge=ours, 一个文件占一行 例: 忽略config.xml 文件 config.xml merge=ours 如果设置了没有起效,在根目录下运行命令行 进行config配置 git config merge.ours.driver true .gitattributes该文件主要是用于设置git对特定文件进行配置属性的,还可进行其他的配置 ...

工作中学习,学习中进步 1270

git merge 排除文件

文件来指定合并策略。你可以设置一个自定义合并策略来忽略特定文件的合并。然后,定义一个自定义的合并策略。在Git中,如果你想在合并时排除特定文件,你可以使用。首先,在仓库的根目录下创建或编辑。

ben_grf的博客 729

Hello Git(二)——Git内部实现机制

一、Git仓库内部实现简介 Git本质上是一个内容寻址(content-addressable)的文件系统,根据文件内容的SHA-1哈希值来定位文件。Git核心部分是一个简单的键值对数据库(key-value data store)。向Git数据库插入任意类型的内容,会返回一个键值,通过返回的键值可以在任意时刻再次检索(retrieve)插入的内容。通过底层命令hash-object可以将任意数据保存到.git目录并返回相应的键值。 Git包含一套面向版本控制系统的工具集,包括高级命令和底层命令。高级命

天山老妖 1579

Git分支合并(merge)时忽略某个文件或者目录

Git分支合并(merge)时忽略某个文件或者目录 前言 ​ 最近使用VUE开发构建了项目,因为打包发布引发了一场小意外,就是不同分支的dist文件夹合并时发生冲突,而且有时先打包后合并的分支,导致两个分支实际发布的是同一套代码,导致乌龙事件的发生,虽然很快找到了问题,但是还是有些尴尬,本文主要记录如何在合并分支时忽略某些文件或者目录。 操作步骤 1. 定义虚拟的合并策略 git config --global merge.ours.driver true 其他配置可参考 Git配置 2. 编辑规

蜀道难,难于上青天。 6825

git 修改commit_动图详解常用的git命令

1.git mergegit merge用于将一个分支(branch)的修改应用到另一个分支(branch)上。git merge包含两种类型:fast-forward和no-fast-forward。1.1 Fast-Forward merge当目标分支(branch)相对于源分支(branch)没有额外的修改时,git不会创建额外的commit,直接进行merge。1.2 No-Fa...

weixin_39884877的博客 403

轻松Git与Github入门

本文详细的介绍了版本控制系统、Git以及GitHub的原理与使用方法,能够比较好的帮助新手入门Git与GitHub

qq_44075108的博客 4075

git merge合并忽略某些文件

通常git上都有两三个分支,release,debug。。。,每个分支有些配置是不一样的,这样的话当你merge时就要避免这些文件, 那如何避免呢,好大坑啊。 新建一个 .gitattributes这个文件用于指定非文本文件的对比合并方式。 假如你要避免这个文件,config.xml,哪如何操作呢。 1, 需要添加一个 merge driver: git config --g...

LoveMyLife 1万+

多分支merge忽略文件合并

在项目根目录下使用以下命令设置全局merge操作的策略。

qq_52030824的博客 2424

Git忽略文件的几种方法,以及.gitignore文件的忽略规则

【代码】在.gitconfig 文件中引用忽略配置文件。

CVPR收割机的博客 3万+

git 中的rebase 与cherry-pick实战

遇到的问题 ## 在项目中遇到这样的一个问题   master分支包含记录:base1,test1,test2,test3,test4   dev分支是基于master的base1后开发的,base1,dev1,dev2,dev3,现在怎么把dev1,dev2,dev3的代码同步到同主分支上? 思路有2个 1) perry-pick,打开idea,选择主分支上对应的记录,点击perry-pick,...

mingtiandexia的专栏 2146

git cherry-pick命令使用

用途:重新生成commitID,在原先其他分支或者本地分支的其他commit之上,然后git push到远端1、在分支A重新提交我在分支B做的一次功能修改,并在分支A提交。2、另一种情况在分支A(在未跟新代码的情况下修改了好几个功能,本地有好几个commit提交),我不能向远端用(git push origin 本地分支 远程分支),我往往会用先用git reset --HARD 到最新merge...

冰夫子的博客 6913
上一篇: 滴滴工程师图文并茂带你深入理解 TCP 握手分手全过程
下一篇: 每个阿里程序员都必须搞懂的Maven基础知识
codehole_
博客等级 码龄7年 34粉丝 132原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值