Git 版本控制:基础介绍与常用操作

news2025/2/1 5:43:53

目录

Git 的基本概念

Git 安装与配置

Git 常用命令与操作

1. 初始化本地仓库

2. 版本控制工作流程

3. 分支管理

4. 解决冲突

5. 回退和撤销

6. 查看提交日志


前言

在软件开发过程中,开发者常常需要在现有程序的基础上进行修改和扩展。但如果不加以管理,很容易出现以下两种问题:

  1. 担心修改错误:怕修改了代码后,原始文件也被弄坏。
  2. 版本混乱:每次修改后,我们都需要保存一个副本,但随着修改的增多,版本数量也随之增加,如何管理这些版本成了难题。

为了解决这些问题,版本控制工具应运而生。Git 是其中最流行的一个,它能帮助我们高效地管理代码版本,确保项目开发过程中的每一步都可追溯、可恢复。

Git 的基本概念

Git 是一个分布式版本控制系统,用于跟踪文件的变化,尤其是在多人协作开发时显得尤为重要。它提供了一个清晰的工作流程,能够让每个人都保持同步并避免冲突。

1. Git 的工作区和仓库

Git 的工作区域包含以下几个部分:

  • 工作区 (Working Directory):即你本地的代码文件夹,开发者在这里进行编码。
  • 暂存区 (Staging Area):你已经修改并准备提交的文件。通过 git add 命令可以把文件加入暂存区。
  • 本地仓库 (Local Repository):本地保存的版本库,提交的内容存储在这里。
  • 远程仓库 (Remote Repository):如 GitHub、GitLab 等托管代码的服务器,团队成员可以从中拉取(pull)或推送(push)代码。

Git 安装与配置

  1. 下载 Git
    前往 Git 官网下载安装包,根据操作系统选择对应版本。 Git 官网https://git-scm.com/downloadshttps://git-scm.com/downloadshttps://git-scm.com/downloadshttps://git-scm.com/downloads

  2. 安装 Git
    安装过程有较多的配置项,安装界面如何勾选请参考我的这篇博客,如下:

Git的安装步骤详解(复杂的安装界面该如何勾选?)-CSDN博客文章浏览阅读79次。用户可以指定创建新仓库时使用的初始分支名称,例如。 https://blog.csdn.net/Future_yzx/article/details/145404243?sharetype=blogdetail&sharerId=145404243&sharerefer=PC&sharesource=Future_yzx&spm=1011.2480.3001.8118

  1. 配置 Git 用户信息
    安装后,需要配置 Git 的全局用户名和邮箱,确保每次提交记录时能够标记出具体的用户。

    git config --global user.name "Your Name"
    git config --global user.email "email@example.com"
    
  2. 配置 SSH 密钥
    为了方便与远程仓库(如 GitHub、GitLab 等)进行交互,我们需要配置 SSH 密钥。

    ssh-keygen -t rsa
    # 按提示生成 SSH 密钥
    cat ~/.ssh/id_rsa.pub
    # 将生成的公钥复制到远程仓库的 SSH 密钥配置中
    

Git 常用命令与操作

1. 初始化本地仓库

git init  # 初始化一个空的 Git 仓库

2. 版本控制工作流程

  • 将文件添加到暂存区:

    git add .  # 添加当前目录下所有文件
    git add fileName  # 添加某个指定文件
    
  • 提交修改到本地仓库:

    git commit -m "提交备注"
    
  • 查看状态:

    git status  # 查看当前仓库的状态
    
  • 推送本地修改到远程仓库:

    git push  # 推送到远程仓库
    
  • 拉取远程仓库的修改:

    git pull  # 拉取远程仓库最新的修改
    

3. 分支管理

Git 允许我们在不同的分支上进行开发,分支操作使得多个开发者可以并行工作,而不会互相影响。

  • 查看本地分支:

    git branch  # 查看所有本地分支
    
  • 创建并切换到新分支:

    git checkout -b new-branch  # 创建并切换到新分支
    
  • 切换到已存在的分支:

    git checkout existing-branch  # 切换到指定的分支
    
  • 合并分支:

    git checkout master  # 切换到 master 分支
    git merge new-branch  # 合并新分支到 master
    
  • 删除分支:

    git branch -d branch-name  # 删除本地分支
    git push origin --delete branch-name  # 删除远程分支
    

4. 解决冲突

出现CONFLICT => 表明该文件有冲突,被至少2人修改。

解决方法:

  • 查看日志,去线下和对应修改人员沟通,确定如何修改。
  • 切忌在协作开发时,随意修改或者删除他人代码

下面为大家演示一个冲突解决案例:

① 现在我们在新建一个分支,dev1

git checkout -b dev1

② 查看:

$ git branch
  dev
* dev1
  master

③ 我们在div1分支下,对文件里边的内容进行修改

④ 然后上传:

git add .
git commit -m"div1进行提交"
git checkout master
git merge dev1
git push

⑤ 上传成功之后,我们在切换到dev分支之下,我们可以看到 div 分支下的文件内容 已经和dev1分支下的文件中的内容不一致了,现在我们重写一个新的内容

⑥ 同样进行上传,然后当我们在合并分支的时候会出现CONFLACT冲突,如下图:

⑦ 打开我们的文件,可以看到git自动帮我们标记出了具体的冲突内容:

⑧ 产生冲突后,我们必须手动解决冲突,只需要我们保留我们想要的结果

⑨ 更改完错误以后需要我们commit提交,然后上传

造成冲突的原图:

在不同分支之下,更改了相同的文件

5. 回退和撤销

  • 撤销未提交的修改

    git checkout fileName  # 撤销某个文件的修改
    git checkout .  # 撤销所有文件的修改
    
  • 回退到上一个提交:

    git reset --hard HEAD^  # 回退到上一个版本
    

6. 查看提交日志

  • 查看提交历史

    git log  # 查看详细的提交日志
    git log --oneline  # 简洁格式查看提交历史
    
  • 查看命令历史

    git reflog  # 查看 Git 命令历史
    

总结

        Git 是一个强大的版本控制工具,它能够帮助开发者高效地管理代码版本,追踪代码修改,避免版本冲突,并且支持多人协作开发。掌握 Git 的基本操作和工作流程对于现代软件开发至关重要。如果你刚刚开始接触 Git,建议多练习命令行操作,理解每一个命令的意义,逐步建立起版本控制的思维方式。

希望本文能帮助你更好地理解 Git,并使用它进行版本管理和团队协作。

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

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

相关文章

跨境数据传输问题常见解决方式

在全球化经济的浪潮下,跨境数据传输已然成为企业日常运营的关键环节。随着数字贸易的蓬勃发展和跨国业务的持续扩张,企业在跨境数据处理方面遭遇了诸多棘手难题。那么,面对这些常见问题,企业该如何应对?镭速跨境数据传…

python-leetcode-删除链表的倒数第 N 个结点

19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode) # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next next class Solution:def removeNthFromEnd(self…

EasyExcel写入和读取多个sheet

最近在工作中,作者频频接触到Excel处理,因此也对EasyExcel进行了一定的研究和学习,也曾困扰过如何处理多个sheet,因此此处分享给大家,希望能有所帮助 目录 1.依赖 2. Excel类 3.处理Excel读取和写入多个sheet 4. 执…

lanqiaoOJ 2097:青蛙过河 ← 二分+前缀和+贪心

【题目来源】 https://www.lanqiao.cn/problems/2097/learning/ https://www.luogu.com.cn/problem/P8775 【题目描述】 小青蛙住在一条河边,它想到河对岸的学校去学习。小青蛙打算经过河里的石头跳到对岸。 备注:此图由百度 AI 创作生成 河里的石头排…

MybatisX插件快速创建项目

一、安装插件 二、创建一个数据表测试 三、IDEA连接Mysql数据库 四、选择MybatiX构造器 五、配置参数 六、项目结构

llama3学习

首先是预训练部分,数据注意版权和风险问题。数据去重和数据清理,PII人的身份信息(人名、地址等)。如果数据有大量PII数据则这个数据丢掉。 网页的数据,提取,代码和数学的提取的特别的方法,OCR…

H3CNE-31-BFD

Bidirectional Forwarding Dection,双向转发检查 作用:毫秒级故障检查,通常结合三层协议(静态路由、vrrp、ospf、BGP等),实现链路故障快速检查。 BFD配置示例 没有中间的SW,接口down&#xff…

python学opencv|读取图像(四十七)使用cv2.bitwise_not()函数实现图像按位取反运算

【0】基础定义 按位与运算:两个等长度二进制数上下对齐,全1取1,其余取0。按位或运算:两个等长度二进制数上下对齐,有1取1,其余取0。 按位取反运算:一个二进制数,0变1,1变0。 【1】…

Ability Kit(程序框架服务)

Ability Kit(程序框架服务)提供了应用程序开发和运行的应用模型,是系统为开发者提供的应用程序所需能力的抽象提炼,它提供了应用程序必备的组件和运行机制。有了应用模型,开发者可以基于一套统一的模型进行应用开发&am…

拦截器快速入门及详解

拦截器Interceptor 快速入门 什么是拦截器? 是一种动态拦截方法调用的机制,类似于过滤器。 拦截器是Spring框架中提供的,用来动态拦截控制器方法的执行。 拦截器的作用:拦截请求,在指定方法调用前后,根…

python爬虫入门(一) - requests库与re库,一个简单的爬虫程序

目录 web请求与requests库 1. web请求 1.1 客户端渲染与服务端渲染 1.2 抓包 1.3 HTTP状态代码 2. requests库 2.1 requests模块的下载 2.2 发送请求头与请求参数 2.3 GET请求与POST请求 GET请求的例子: POST请求的例子: 3. 案例:…

智慧园区管理平台实现智能整合提升企业运营模式与管理效率

内容概要 在当今数字化的背景下,智慧园区管理平台正逐渐成为企业提升运营效率和管理模式的重要工具。这个平台汇聚了多种先进技术,旨在通过智能整合各类资源与信息,帮助企业实现全面的管理创新。 智慧园区管理平台不仅仅是一个数据处理工具…

傅里叶分析之掐死教程

https://zhuanlan.zhihu.com/p/19763358 要让读者在不看任何数学公式的情况下理解傅里叶分析。 傅里叶分析 不仅仅是一个数学工具,更是一种可以彻底颠覆一个人以前世界观的思维模式。但不幸的是,傅里叶分析的公式看起来太复杂了,所以很多…

PVE 虚拟机安装 Debian 无图形化界面服务器

Debian 安装 Debian 镜像下载 找一个Debian镜像服务器,根据需要的版本和自己硬件选择。 iso-cd/:较小,仅包含安装所需的基础组件,可能需要网络访问来完成安装。有镜像 debian-12.9.0-amd64-netinst.isoiso-dvd/:较…

乐理笔记——DAY02

三分钟音乐社视频地址: 调号总结篇https://www.bilibili.com/video/BV14p4y1e7TV?spm_id_from333.788.videopod.episodes&vd_source0a2d366696f87e241adc64419bf12cab&p25https://www.bilibili.com/video/BV14p4y1e7TV?spm_id_from333.788.videopod.epis…

企业知识管理在推动组织变革与适应性发展中的关键性作用分析

内容概要 企业知识管理是信息时代背景下的重要管理理念,旨在通过有效地获取、分享和再利用知识,提升组织在变革中的灵活性和创新能力。知识作为企业的重要资产,其有效管理不仅影响到日常运营,更是推动组织变革与适应性发展的核心…

动态规划DP 最长上升子序列模型 登山(题目分析+C++完整代码)

概览检索 动态规划DP 最长上升子序列模型 登山 原题链接 AcWing 1014. 登山 题目描述 五一到了,ACM队组织大家去登山观光,队员们发现山上一共有N个景点,并且决定按照顺序来浏览这些景点,即每次所浏览景点的编号都要大于前一个…

芯片AI深度实战:进阶篇之vim内verilog实时基于AST的自定义检视

本文基于Editor Integration | ast-grep,以及coc.nvim,并基于以下verilog parser(my-language.so,文末下载链接), 可以在vim中实时显示自定义的verilog 匹配。效果图如下: 需要的配置如下: 系列文章: 芯片…

AI 计算的未来:去中心化浪潮与全球竞争格局重塑

引言 人工智能(AI)正以前所未有的速度发展,尤其是大模型训练和推理效率的提升,使得 AI 计算成本迅速下降,呈现出向去中心化演进的趋势。 最新的 DeepSeek r1 模型,以仅 600 万美元 的训练成本,达到了 OpenAI o1 级别的性能,表明 AI 技术正迈向更具普惠性的阶段。这一趋…

JxBrowser 8.2.2 版本发布啦!

JxBrowser 8.2.2 版本发布啦! • 已更新 #Chromium 至更新版本 • 实施了多项质量改进 🔗 点击此处了解更多详情。 🆓 获取 30 天免费试用。