git基本使用(一):git的基本概念

        Git 是一种分布式版本控制系统,最初由 Linus Torvalds 于 2005 年为 Linux 内核开发。它主要用于跟踪文件的更改,特别是在软件开发过程中,可以帮助团队成员协同工作。它在实际项目开发中,应用非常广泛,我们这一节来掌握它的基本使用,为以后工作做个铺垫。

一、git安装

二、git基本概念

       git可以实现代码的版本控制,有利于实际项目的开发,实际上项目的开发分为很多个阶段,每个阶段便构成了代码的不同的版本,它保存了代码的整个开发过程,分模块,分阶段,这样,团队开发的效率就会得到提升,当多个开发者一起工作时,每个人都在不同的地方修改代码。没有版本控制,大家会不断覆盖彼此的工作。版本控制系统就像一个超级助手,帮每个人记录他们的修改,并在需要时合并这些修改,确保每个人的工作都能被正确地整合。可以把它比作一个“时间机器”或者一个超级智能的“备忘录”,用来记录和管理文件(特别是代码)变化的历史。想象你在写一本书,每次写完一部分都能按下一个按钮,保存当前的状态。这样,你随时可以回到任何一个保存过的版本,无论你后来对书做了多少修改。Git 就是这样的时间机器,每次你提交(commit)代码,它就会记录当前的状态,让你可以随时回到以前的版本。

2.1 相关概念

  1. git        是软件 ,linux上就是命令、windows上就是应用程序(进行代码版本控制)
  2. github  网站(国外的托管代码平台,存储代码)
  3. gitee    阿里,码云(国内的代码托管平台)

2.2 代码版本控制的发展阶段

2.2.1 集中式代码管理

       集中式版本控制系统(CVCS)依赖于一个中央服务器来存储所有的版本文件。用户从中央服务器中检出代码的工作副本,进行修改后再提交回中央服务器。多个开发人员在本地开发代码,只有代码的最新版本,都将代码上传至服务器,服务器会存储代码的各个历史版本,如果服务器坏掉了,在服务器的各个历史版本都没有了,以后想要找之前的版本,再进行开发其他的项目,就没办法进行了。

特点:

  1. 中央仓库: 所有代码都存储在一个中央仓库中。
  2. 简单管理: 管理和设置相对简单,适合小团队和项目。
  3. 依赖网络: 操作需要与中央服务器的连接,离线工作不便。
  4. 冲突处理: 冲突处理通常在提交到中央服务器时进行。

优点:

  • 易于理解和管理。
  • 适合小型团队,简单的工作流程。
  • 所有的版本历史保存在一个地方,易于备份和恢复。

缺点:

  • 单点故障:中央服务器若出现故障,整个团队的开发工作可能会中断。
  • 不支持离线工作:离线时无法提交代码,也无法获取最新的代码更新。

常见工具:

  • Subversion (SVN)
  • Perforce

2.2.2 分布式代码管理

      分布式版本控制系统(DVCS)允许每个用户拥有代码库的完整副本。用户可以在自己的本地仓库中进行修改和提交,然后再与其他用户或中央仓库进行同步。每个开发人员都会有代码的各个历史版本,你写好了最新版本,提交到服务器上,别人要用,就会下载,下载下来会把各个历史版本的代码都下载下来,这样的好处就是,不怕服务器坏掉,坏掉之后,开发人员再上传就好,因为开发人员都有各个历史版本的代码。

特点:

  1. 本地仓库: 每个开发者都拥有整个代码库的本地副本,包括历史记录。
  2. 离线工作: 允许在离线状态下进行提交和其他版本控制操作。
  3. 分布式协作: 支持开发者之间更灵活的协作和分支管理。
  4. 冲突处理: 冲突处理在本地仓库与其他仓库同步时进行。

优点:

  • 无单点故障:即使中央仓库不可用,开发者也可以继续工作。
  • 支持离线工作:开发者可以在任何时间进行提交和其他操作。
  • 更好的性能:大部分操作都是本地完成的,速度更快。
  • 灵活的协作:支持更复杂的分支和合并策略,适合大型项目和分布式团队。

缺点:

  • 初始学习曲线较陡:需要学习如何处理本地和远程仓库的同步。
  • 存储需求大:每个开发者都需要存储整个代码库的副本。
  • 复杂管理:大规模协作时,可能需要更复杂的管理和工具支持。

常见工具:

  • Git
  • Mercurial

2.3 git属于分布式代码管理工具

三、 git的使用

3.1 四个工作区

         git本地有四个工作域:工作区(working directory), 暂存区(stage/index), 本地仓库(repository)。远程仓库(远程服务器上的git仓库(remote directory))。其关系如下:

  1. 工作区,就是你平时存放项目代码的地方
  2. 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息
  3. 仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数 据。其中HEAD指向最新放入仓库的版本
  4.  远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

3.2 工作流程

git工作的一般流程:

  1. 在工作目录中添加,修改文件
  2. 将需要进行版本管理的文件放入暂存区
  3. 将暂存区的文件提交到git仓库

3.3  git基本命令

3.3.1   创建本地仓库,提交代码

注意事项: 第一次使用git命令提交代码之前,需要先设置用户名及邮箱,之后就不需要了:

   git status 查看状态, 如果工作区的代码和本地仓库最新版本的一致,就会显示无文件要提交,干净的工作区。给本地仓库提交一个版本,都会有一个唯一的编号,来标识。往暂存区可以add很多次,然后一次性提交很多到仓库。

经过以上几步,我们就可以将我们写的代码存放到本地的仓库中。我们进行简单总结:

  1. git init :             初始化仓库,将存放代码的目录变为一个可以通过git管理的仓库
  2. git add 代码文件名 : 将代码文件添加到暂存区
  3. git commit -m "版本描述信息" : 将代码从暂存区提交到本地仓库
  4. git log :            可以查看提交的历史记录

 

  1. git reflog 查看对仓库做的操作
  2. git status 查看仓库状态,有些操作必须保证工作区是干净的才可以做
  3. git reset --hard HEAD^^ 几个^就是回退几个版本
  4. git reset --hard 编号 回到哪个版本

3.3.2  其他常用操作

 1、比较版本差异:使用git diff HEAD命令,HEAD也可以省略默认就是与最近 一次比较。

        使用git diff HEAD 比较当前内容与最后一次提交的版本的差异,如下在main.c中添加了一行内容,显示添加的一行前面有‘+’号标识。如果内容相同则该命令不显示输出结果。HEAD也可以省略默认就是与最近 一次比较。 

2、撤销本次修改:使用git checkout filename 放弃对工作区代码的修改。

3、从暂存区撤销:使用git reset HEAD filename 从暂存区撤销

       注意:在暂存区中的文件可以撤销,但是加入到仓库中的文件就不能撤回了  ,必须要重新提交新的修改后的文件才可以。

至此,就将使用命令的方式来使用git介绍完毕,掌握最基本的操作,是我们以后工作的基础,下一节我们将介绍git分支的操作命令,感谢阅读,如果喜欢,点赞关注加收藏!

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

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

相关文章

qt 滚动区域简单实验

1.概要 有些时候,想用一个有限的区域显示更多的内容,且内容不固定用滚动区域控件是一个不错的选择,我今天就用一个图片简单的实验一下。 2.代码(关键代码) #include "widget.h" #include "ui_widget…

flutter开发实战-Webview及dispose关闭背景音

flutter开发实战-Webview及dispose关闭背景音 当在使用webview的时候,dispose需要关闭网页的背景音或者音效。 一、webview的使用 在工程的pubspec.yaml中引入插件 webview_flutter: ^4.4.2webview_cookie_manager: ^2.0.6Webview的使用代码如下 初始化WebView…

uni-app上传失败超出文件限制解决方法-分包处理-预加载

分包背景 当你的上传出现一下错误: Error: 系统错误,错误码:80051,source size 2089KB exceed max limit 2MB [20240703 10:53:06][wxbf93dfb6cb3eb8af] [1.06.2405010][win32-x64] 说明你主包太大需要处理了,一下两种方法可以…

Day03-Jenkins与集成案例

Day03-Jenkins与集成案例 6. CD持续交付,持续部署实现方案7. 案例04: basketball案例,搭建开发测试专用的任务7.1 任务要求7.2 步骤7.3 详细步骤1)安装插件2)创建任务 7.4 gitlab配置钩子1) 解除钩子局域网访问限制2) gitlab配置钩子 7.5 与部…

网络基础:OSPF 协议

OSPF(Open Shortest Path First)是一种广泛使用的链路状态路由协议,用于IP网络中的内部网关协议(IGP)。OSPF通过在网络中的所有路由器之间交换路由信息,选择从源到目的地的最优路径。OSPF工作在OSI模型的第…

Nginx系列(二)---Mac上的快速使用

一、安装 前置软件&#xff1a;Homebrew 安装方法&#xff1a;终端输入/bin/bash -c "$(curl -fsSL <https://cdn.jsdelivr.net/gh/ineo6/homebrew-install/install.sh>)"更新&#xff1a; brew update 设置中科大镜像源&#xff1a;git -C "$(brew --r…

昇思25天学习打卡营第10天 | 自然语言处理:RNN实现情感分类

1. RNN实现情感分类 1.2 概述 情感分类是自然语言处理中的经典任务&#xff0c;是典型的分类问题。本节使用MindSpore实现一个基于RNN网络的情感分类模型&#xff0c;实现如下的效果&#xff1a; 输入: This film is terrible 正确标签: Negative(负面) 预测标签: Negative输…

初识Spark

一、简介 官网&#xff1a;Apache Spark™ - Unified Engine for large-scale data analytics Apache的顶级项目&#xff0c;用于大规模数据处理的统一分析引擎。 支持语言&#xff1a;Java、Scala、Python和R (源码为Scala) 高级工具&#xff1a; 1、SparkSQL用于SQL和结构…

Linux中cat命令的英文含义

我之前一直在想cat不是猫的意思吗&#xff0c;但是cat命令在Linux中并不是指"猫"这个动物&#xff0c;而是来源于它的功能&#xff1a;concatenate&#xff08;连接&#xff09;和typeset&#xff08;打印&#xff09;。这个命令的名称是这两个功能的首字母缩写。尽管…

DevExpress WPF中文教程:Grid - 如何显示摘要(设计时)?

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

Mac/Linux安装JMeter压测工具

Mac安装JMeter压测工具 介绍 Apache JMeter™应用程序是开源软件&#xff0c;是一个100%纯的Java应用程序&#xff0c;旨在加载测试功能行为和衡量性能。它最初是为测试Web应用程序而设计的&#xff0c;但后来扩展到其他测试功能。 我能用它做什么&#xff1f; Apache JMet…

vue高德地图使用

先根据官方方法给vue项目引入高德 高德文档地址 做好准备后使用 初始化地图 AMap.plugin(AMap.MoveAnimation, () >{//地图this.map new AMap.Map("mapContainer", {resizeEnable: true,center: [116.397447,39.909176],//地图中心坐标zoom:12,//缩放值});this.…

Appium+python自动化(三十九)-Appium自动化测试框架综合实践 - 代码实现(超详解)

1.简介 今天我们紧接着上一篇继续分享Appium自动化测试框架综合实践 - 代码实现。由于时间的关系&#xff0c;宏哥这里用代码给小伙伴演示两个模块&#xff1a;注册和登录。 2.业务模块封装 因为现在各种APP的层出不群&#xff0c;各式各样的。但是其大多数都有注册、登录。为…

走在健康前沿:低GI食品认证与现代饮食的新篇章

随着现代社会节奏的加快&#xff0c;人们对健康饮食的追求也日益增强。在众多饮食理念中&#xff0c;低血糖生成指数&#xff08;GI&#xff09;食品凭借其对控制血糖和预防慢性疾病的潜在益处&#xff0c;逐渐成为健康饮食领域的明星。 GI的科学解码 GI&#xff0c;即食物血糖…

CTFHUB-SSRF-URL Bypass

开启题目 给出提示&#xff0c;url参数的值中必须包含有 http://notfound.ctfhub.com &#xff0c;可以采用&#xff0c;也就是 HTTP 基本身份认证绕过 HTTP 基本身份认证允许 Web 浏览器或其他客户端程序在请求时提供用户名和口令形式的身份凭证的一种登录验证方式。 也就是…

AIGC文生图lora微调训练案例;SD-Train界面训练stable Diffusion lora模型

lora仓库&#xff08;1000多个lora微调模型分享&#xff09;&#xff1a; https://lorastudio.co/models 1、命令代码方式&#xff1a;文生图lora微调训练案例 主要用huggingface相关包&#xff1a;peft、accelerate、diffusers 参考&#xff1a; https://huggingface.co/blo…

Swift 6:导入语句上的访问级别

文章目录 前言示例启用 AccessLevelOnImport破坏性变更采用这些更改总结前言 SE-0409 提案引入了一项新功能,即允许使用 Swift 的任何可用访问级别标记导入声明,以限制导入的符号可以在哪些类型或接口中使用。由于这些变化,现在可以将依赖项标记为对当前源文件(private 或…

PostgreSQL的pg_filedump工具

PostgreSQL的pg_filedump工具 基础信息 OS版本&#xff1a;Red Hat Enterprise Linux Server release 7.9 (Maipo) DB版本&#xff1a;16.2 pg软件目录&#xff1a;/home/pg16/soft pg数据目录&#xff1a;/home/pg16/data 端口&#xff1a;5777pg_filedump 是一个工具&#x…

JAVA小知识30:JAVA多线程篇1,认识多线程与线程安全问题以及解决方案。(万字解析)

来 多线程&#xff0c;一个学起来挺难但是实际应用不难的一个知识点&#xff0c;甚至在很多情况下都不需要考虑&#xff0c;最多就是写测试类的时候模拟一下并发&#xff0c;现在我们就来讲讲基础的多线程知识。 一、线程和进程、并发与并行 1.1、线程和进程 线程&am…

Java学习十二—Java8特性之Optional类

一、简介 Java 8 引入了 Optional​ 类作为一种容器&#xff0c;可以用来显式地表示一个值存在或不存在。它解决了传统上可能会遇到的空指针异常问题&#xff0c;同时提供了一种更优雅的方式来处理可能为null的情况。 Java 8 中引入 Optional​ 类的背景可以从以下几个方面来理…