Git版本控制系统

Git作为目前最流行的分布式版本控制系统,已经成为开发者必备的技能之一。本文将全面介绍Git的核心概念、基本操作、分支管理以及与GitHub的协作开发,帮助读者从零开始掌握Git的使用。

一、Git概述

1.1 Git发展历史

Git诞生于2005年,由Linux之父Linus Torvalds开发。当时Linux内核开发社区与BitKeeper(当时使用的版本控制系统)的合作关系终止,促使Linus开发了Git这一全新的版本控制系统。Git的设计目标包括:

  • 极快的速度

  • 简单的设计

  • 强大的非线性分支支持(支持上千个并行开发分支)

  • 完全分布式架构

  • 高效处理大型项目(如Linux内核)

1.2 Git与SVN对比

特性Git(分布式)SVN(集中式)
架构每个开发者都有完整仓库副本只有一个中央仓库
网络依赖大部分操作不需要网络几乎所有操作都需要网络
分支处理轻量级分支,创建/切换快速分支是目录拷贝,操作较慢
提交速度本地提交,极快必须连接服务器,较慢
历史查看本地即可查看完整历史需要连接服务器查看历史
适用场景适合分布式团队协作适合集中管理的团队

二、Git安装与配置

2.1 Windows系统安装

  1. 下载Git:访问Git官网下载Windows版本

  2. 安装Git

    • 运行安装程序

    • 基本保持默认选项,一路"Next"

    • 安装完成后可在右键菜单看到Git选项

  3. 安装TortoiseGit(图形界面工具)

    • 下载TortoiseGit并安装

    • 安装过程中配置Git路径(通常是C:\Program Files\Git\bin\git.exe

    • 设置用户名和邮箱(用于标识提交者)

  4. 安装中文语言包(可选)

    • 下载对应版本的中文语言包

    • 安装后在TortoiseGit设置中选择中文界面

2.2 基本配置

配置全局用户名和邮箱:

git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

查看配置信息:

git config --list

三、Git基础操作

3.1 创建仓库

命令行方式

mkdir myproject
cd myproject
git init

图形界面方式

  1. 在文件夹中右键选择"Git在这里创建版本库"

  2. 确认后会在目录下生成.git隐藏文件夹

3.2 工作区与暂存区

  • 工作区:实际看到的项目目录

  • 暂存区(stage/index):临时存放修改的地方

  • 版本库.git目录,存储所有版本数据

文件状态变化流程:

工作区 → git add → 暂存区 → git commit → 版本库

3.3 基本操作命令

  1. 添加文件到暂存区

git add filename  # 添加单个文件
git add .         # 添加所有修改
  1. 提交到版本库

git commit -m "提交说明"
  1. 查看状态

git status
  1. 查看修改内容

git diff       # 查看工作区与暂存区差异
git diff --cached  # 查看暂存区与版本库差异
  1. 查看提交历史

git log
git log --pretty=oneline  # 简洁显示

3.4 撤销修改

  1. 丢弃工作区修改

git checkout -- filename
  1. 从暂存区撤回

git reset HEAD filename
  1. 版本回退

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

四、远程仓库

4.1 GitHub使用

  1. 创建SSH Key

ssh-keygen -t rsa -C "your.email@example.com"

生成的公钥(id_rsa.pub)内容添加到GitHub账户的SSH Keys中

  1. 添加远程仓库

git remote add origin git@github.com:username/repo.git
  1. 推送本地分支

git push -u origin master  # 第一次推送
git push origin master    # 后续推送
  1. 克隆远程仓库

git clone git@github.com:username/repo.git

4.2 远程操作命令

  1. 查看远程仓库

git remote -v
  1. 从远程获取更新

git fetch origin   # 只获取不合并
git pull origin master  # 获取并合并
  1. 删除远程分支

git push origin --delete branch_name

五、分支管理

5.1 分支基本操作

  1. 创建分支

git branch dev      # 创建分支
git checkout dev    # 切换分支
git checkout -b dev # 创建并切换
  1. 查看分支

git branch     # 查看本地分支
git branch -r  # 查看远程分支
git branch -a  # 查看所有分支
  1. 合并分支

git checkout master  # 切换到主分支
git merge dev        # 合并dev分支
  1. 删除分支

git branch -d dev    # 删除已合并分支
git branch -D dev    # 强制删除未合并分支

5.2 解决冲突

当合并分支出现冲突时:

  1. 手动编辑冲突文件(Git会用<<<<<<<=======>>>>>>>标记冲突内容)

  2. 解决冲突后重新添加并提交:

git add filename
git commit -m "解决冲突"

5.3 分支策略

推荐的工作流程:

master分支:仅用于发布稳定版本
dev分支:集成开发分支
feature分支:开发新功能(每个功能一个分支)

六、Git高级技巧

6.1 忽略文件

创建.gitignore文件,添加需要忽略的文件模式:

# 忽略所有.class文件
*.class# 忽略target目录
target/# 忽略特定文件
config.properties

6.2 储藏(Stash)

临时保存工作现场:

git stash        # 储藏当前修改
git stash list   # 查看储藏列表
git stash apply  # 恢复最近一次储藏
git stash drop   # 删除储藏
git stash pop    # 恢复并删除储藏

6.3 标签管理

  1. 创建标签

git tag v1.0          # 轻量标签
git tag -a v1.0 -m "版本1.0"  # 附注标签
  1. 查看标签

git tag
git show v1.0
  1. 推送标签

git push origin v1.0     # 推送单个标签
git push origin --tags   # 推送所有标签

七、Git图形工具

7.1 TortoiseGit常用操作

  1. 克隆仓库

    • 右键选择"Git克隆"

    • 填写URL和目标目录

  2. 提交修改

    • 右键选择"Git提交"

    • 选择要提交的文件,填写提交信息

  3. 查看历史

    • 右键选择"显示日志"

  4. 分支操作

    • 右键选择"创建分支"/"切换/检出"

7.2 IDE集成(IntelliJ IDEA)

  1. 配置Git路径

    • File → Settings → Version Control → Git

  2. 导入项目到Git

    • VCS → Import into Version Control → Create Git Repository

  3. 提交更改

    • 点击工具栏√图标或Ctrl+K

  4. 推送更改

    • VCS → Git → Push

  5. 更新项目

    • VCS → Update Project 或 工具栏↓图标

八、Git最佳实践

  1. 提交规范

    • 提交信息清晰明确,说明做了什么修改

    • 推荐格式:<类型>: <描述>,如feat: 添加用户登录功能

  2. 分支策略

    • 主分支保持稳定,开发在新分支进行

    • 功能分支尽量小而专注

  3. 频繁提交

    • 小步提交,每个提交解决一个问题

    • 避免大而全的提交

  4. 代码审查

    • 使用Pull Request进行代码审查

    • 确保代码质量后再合并到主分支

九、常见问题解答

Q1: 如何撤销已经推送的提交?

git revert commit_id  # 创建反向提交
git push

Q2: 如何修改最后一次提交?

git commit --amend

Q3: 如何找回删除的分支?

git reflog  # 查看操作历史
git checkout -b branch_name commit_id

Q4: 如何解决合并冲突?

  1. 手动编辑冲突文件

  2. 删除冲突标记(<<<<<<<=======>>>>>>>)

  3. 保存后添加并提交

十、学习资源推荐

  1. Pro Git电子书

  2. Git官方文档

  3. GitHub Guides

  4. Learn Git Branching(交互式学习)

结语

Git作为现代软件开发的核心工具,掌握它将极大提升你的开发效率。本文涵盖了Git的基础知识到高级技巧,建议读者在学习的同时多加实践。记住,Git的学习曲线可能有些陡峭,但一旦掌握,你将体会到它带来的巨大便利。

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

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

相关文章

如何编译RustDesk(Unbuntu 和Android版本)

编译Linux版本的RustDesk备注&#xff1a;官方文档上&#xff0c;一边都是基于sciter&#xff0c;这个在后面已经不建议使用了&#xff0c;但是依然可以编译刚开始的时候看官方的文档&#xff0c;涉及的东西比较多&#xff0c;也搞的一头雾水&#xff0c;通过B站上一个视频&…

Spring中的循环依赖:解密、破局与架构启示

> 当两个Bean紧紧相拥,Spring容器却陷入死锁——这是Java开发者的经典噩梦 某电商平台凌晨上线时突然宕机,日志里反复滚动着`BeanCurrentlyInCreationException`的报错。经排查,**优惠券服务与库存服务在初始化时相互依赖**,形成致命闭环。这个价值百万的故障案例,揭开…

DataFrame​(数据框)

一种二维表格型数据结构&#xff0c;类似于电子表格&#xff08;如 Excel&#xff09;或 SQL 表&#xff0c;由行&#xff08;记录&#xff09;​和列&#xff08;字段&#xff09;​组成。它是数据分析、机器学习和科学计算中最常用的数据结构之一&#xff0c;尤其在 ​Python…

B站视频评论数据爬取

爬取B站视频评论数据爬取与分析 如果只要单纯的脚本可以直接看项目结构里的b_comments.py 一、技术架构 1、环境配置 Python 3.8PyCharm 2、模块配置 requests&#xff1a;用于发送HTTP请求time&#xff1a;用于处理时间相关的操作csv&#xff1a;用于读写CSV文件json&#xff…

OpenAI最新大模型GPT-4o体验之Code Copilot AI编程大模型

一、前言GPT-4o&#xff08;"o"代表"全能"&#xff09;具备处理各种文本、声音和图像资料的能力&#xff0c;能够输出多种格式的文本、声音和图像。GPT-4o 的推出标志着 AI 技术的重大突破。它不再局限于单一媒介&#xff0c;而是首次实现了文本、语音和图…

社交电商推客系统全栈开发指南:SpringCloud+分润算法+Flutter跨端

一、推客系统概述与市场背景推客系统&#xff08;TuiKe System&#xff09;是一种基于社交关系的营销推广平台&#xff0c;通过用户分享商品或服务链接&#xff0c;实现裂变式传播和精准营销。近年来&#xff0c;随着社交电商的蓬勃发展&#xff0c;推客系统已成为企业获客的重…

网安-中间件-Redis未授权访问漏洞

目录 Redis Redis持久化 动态修改配置 使用反弹连接的情况 常见监听端口的方式 常见建立反弹连接的方式 流程 Linux crontab cron文件存储路径 利用Redis实现攻击 1.webshell提权案例 2.定时任务shell反弹案例 3.SSH Key getshell案例 ​编辑Redis其他利用方式 …

【c++深入系列】:万字详解栈和队列和deque(附模拟实现的源码)

&#x1f525; 本文专栏&#xff1a;c &#x1f338;作者主页&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客励志语录&#xff1a; 石头能被水滴穿&#xff0c;不是因为水有多强&#xff0c;而是因为它从未停过。 ★★★ 本文前置知识&#xff1a; 模版 栈 那么栈这个…

速通python加密之RSA加密

RSA加密 RSA加密是一种非对称加密算法&#xff08;与AES等对称加密不同&#xff09;&#xff0c;由罗纳德李维斯特&#xff08;Ron Rivest&#xff09;、阿迪萨莫尔&#xff08;Adi Shamir&#xff09;和伦纳德阿德曼&#xff08;Leonard Adleman&#xff09;于1977年提出&…

Java BeanUtils 类详解:作用、语法与示例

一、BeanUtils 的核心作用BeanUtils 是 Apache Commons 和 Spring Framework 提供的工具类&#xff0c;主要用于简化 JavaBean 的操作。核心功能包括&#xff1a;属性拷贝&#xff1a;对象间同名属性自动复制动态访问&#xff1a;通过字符串名称操作属性类型转换&#xff1a;自…

PyCharm高效开发全攻略

安装与基础配置下载PyCharm专业版或社区版&#xff08;免费&#xff09;并完成安装。首次启动时选择默认设置或自定义主题、字体大小等界面偏好。配置Python解释器路径&#xff08;推荐使用虚拟环境&#xff09;&#xff0c;确保项目依赖隔离。快捷键与导航熟悉核心快捷键能大幅…

Pycharm 给 python 程序打包EXE的配置和方法

前言: Python 语言的设计变得越来越简单,它有很多可以使用的库,所以尤其在人工智能时代,Python语言被广泛应用。但是Python语言和windows系统的兼容性稍微偏弱,如何生成windows可以执行的exe文件。是要一个很复杂的配置过程,本文就会做一个介绍。 本文,通过一个Python…

【Linux | 网络】传输层(UDP和TCP)

目录一、再谈端口号1.1 端口号1.2 端口号的范围划分1.3 常见知名端口号1.4 netstat 命令1.5 进程与端口号的关系1.6 pidof 命令二、UDP协议2.1 UDP协议段格式2.2 如何理解UDP报头和UDP报文2.2.1 UDP报头2.2.2 UDP报文和UDP报文的管理2.2.3 UDP封装过程2.3 UDP的特点2.4 UDP的缓…

mybatisX的自定义模板生成

在idea中使用mybtais的自定义模板生成&#xff0c;可以帮我们省去很多重复的代码。 打开一个项目&#xff0c;我们要修改的主要就两个文件&#xff0c;一个是生成的mapper接口&#xff0c;另一个是xml文件&#xff1a; 相应的mapper接口模板为&#xff1a; package ${mapper…

miniz:一个轻量级、高性能的开源压缩库

目录 1.简介 2.核心特性 3.基本使用示例 4.与 ZLIB 的对比 5.使用场景 6.注意事项 1.简介 miniz 是一个轻量级、高性能的开源压缩库&#xff0c;专注于提供 ZLIB/GZIP 兼容的压缩和解压缩功能。它的核心优势在于体积小巧&#xff08;单文件实现&#xff09;、跨平台支持和…

Jenkins接口自动化测试(构建)平台搭建

Python接口自动化测试零基础入门到精通&#xff08;2025最新版&#xff09;自动化测试流程 在进行平台搭建前&#xff0c;我们首先要问自己&#xff1a;我需要搭建的平台的功能是什么&#xff0c;要实现什么目标&#xff1f; 在我的理解中&#xff0c;自动化构建平台的执行流…

Day 22: 复习

机器学习数据处理与降维技术复习总结 前言 经过6天的学习&#xff0c;我们系统地学习了从基础的Numpy数组操作到高级的降维算法&#xff0c;这些内容构成了机器学习数据预处理的重要知识体系。本文将对这一系列学习内容进行全面复习和总结&#xff0c;帮助大家建立完整的知识…

力扣 hot100 Day56

46. 全排列 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 //抄的 class Solution { private:vector<vector<int>>result;vector<int> path; public:void backtracking(vector<int>& nu…

Android 编码规范全指南

在 Android 开发领域&#xff0c;代码不仅是功能实现的载体&#xff0c;更是团队协作与项目迭代的基础。一套完善的编码规范&#xff0c;能让代码从 “可运行” 升级为 “易维护、可扩展、低风险”。本文基于 Google、Square 等顶尖团队的实践经验&#xff0c;结合国内 Android…

[RPA] Excel中的字典处理

案例1一个Excel文件总共有2个Sheet页&#xff0c;分别为总表和对照表通过对照表sheet页&#xff0c;设置价格对照字典对照表循环总表sheet页&#xff0c;根据循环到的商品名称&#xff0c;找到对应字典中的价格&#xff0c;并计算出总价总表将总价写入到Excel表中C列&#xff0…