Git--使用教程

Git的框架讲解

Git 是一个分布式版本控制系统,其架构设计旨在高效地管理代码版本,支持分布式协作,并确保数据的完整性和安全性。

Git 的核心组件:

  1. 工作区(Working Directory): 工作区是你在本地计算机上实际操作的目录,包含了项目的所有文件。 在工作区中,你可以编辑、删除或添加文件。
  2. 暂存区(Staging Area): 暂存区是一个中间区域,用于暂时保存你对文件所做的修改,等待提交到本地仓库。 当使用 git add 命令时,修改的文件会被添加到暂存区。
  3. 本地仓库(Local Repository): 本地仓库是一个隐藏的 .git 目录,存储了项目的版本历史和配置信息。 在本地仓库中,Git 会记录每次提交的快照,以及分支、标签等信息。
  4. 远程仓库(Remote Repository): 远程仓库是托管在服务器上的 Git 仓库,用于团队协作和代码共享。 常见的远程仓库托管服务包括 GitHub、GitLab 和 Bitbucket 等。

Git 的工作流程:

  1. 克隆仓库:git clone 命令从远程仓库复制一份完整的项目到本地,包括所有的版本历史。
  2. 在工作区修改文件: 本地工作区中编辑、添加或删除文件。
  3. 将修改添加到暂存区:git add 命令将修改的文件添加到暂存区,准备提交。
  4. 提交到本地仓库:git commit 命令将暂存区的修改提交到本地仓库,形成一个新的版本快照。
  5. 推送到远程仓库:git push 命令将本地仓库的提交推送到远程仓库,供团队成员共享。
  6. 拉取远程仓库的修改:git pull 命令从远程仓库拉取最新的修改,并与本地仓库合并。

Git 的数据存储结构:

  • 对象(Objects):
    • Git 使用对象来存储数据,主要包括:
      • 提交对象(Commit): 目录项目的历史版本信息。
      • 树对象(Tree): 展示目录结构。
      • 文件对象(Blob): 展示文件内容。
      • 标签对象(Tag): 用于标记特定的提交点。
  • 有向无环图(DAG): Git 使用有向无环图来表示提交历史,每个提交对象指向其父提交对象,形成一个有向无环图结构。
  • 分支(Branches): 分支是指向提交对象的指针,允许在不同的开发线中并行工作。 默认的主分支通常命名为 mastermain

Git 的优势:

  • 分布式架构:
    • 每个开发者的本地仓库都是完整的版本库,支持离线工作和分布式协作。
  • 高效的分支和合并:
    • Git 的分支操作非常轻量级,创建和切换分支速度快,合并操作也非常高效。
  • 数据完整性:
    • Git 使用 SHA-1 哈希算法来标识对象,确保数据的完整性和一致性。
  • 灵活的工作流:
    • Git 支持多种工作流,如集中式工作流、功能分支工作流、GitFlow 工作流等,满足不同团队的需求。

过以上架构设计,Git 实现了高效、灵活且安全的版本控制,广泛应用于软件开发和协作中。


Git的使用

一、基础配置

1. 首次使用 Git 的配置
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
git config --global core.editor "vim"  # 设置默认编辑器
git config --global credential.helper store #保存
git config --list  # 查看所有配置
2. 生成 SSH 密钥(用于远程仓库认证)
ssh-keygen -t ed25519 -C "your_email@example.com"  # 生成密钥
cat ~/.ssh/id_ed25519.pub  # 复制公钥到 GitHub/GitLab

详情可以查看这篇博文:git --SSH配置(免秘钥登录)


二、本地仓库操作

本地仓库由工作区,暂存区,本地仓库三个部分组成
在这里插入图片描述

1. 创建仓库
git init              # 初始化新仓库
git clone <url>       # 克隆远程仓库(自动创建 origin 远程)
2. 文件状态管理
查看状态
git status            # 查看工作区/暂存区状态
比较差异
git diff                             #1.查看更新的详细信息命令#2.比较工作区和暂存区的差异
git diff HEAD                        #比较工作区和版本库之间的差异
git diff cached                      #比较暂存区和版本库之间的差异
git diff  ID1 ID2                    #比较两个特定版本之间的差异
git diff HEAD~3 HEAD file3.txt       #查看指定文件的差异内容
添加文件到暂存区
git add <file>        # 添加单个文件到暂存区
git add .             # 添加所有修改到暂存区
删除文件
rm <file>                #删除工作区文件 
git add <file>           #将删除后的工作区与暂存区同步git rm <file>            #删除暂存和工作区文件
git rm --cached <file>   #将版本库中的文件删除
git reset <file>         # 从暂存区移除文件(保留工作区修改)
git restore <file>       # 丢弃工作区修改(Git 2.23+)
git checkout             #撤销工作区的修改

在这里插入图片描述

忽略文件 (对已经添加到版本库中的文件没用) .gitignore
(1)忽略某些文件类型

如果你想忽略某些特定类型的文件,比如编译生成的二进制文件或者日志文件,可以使用通配符 *

示例:
  • 忽略所有 .log 文件:
    *.log
    
  • 忽略所有 .class 文件(Java 编译生成的文件):
    *.class
    
  • 忽略所有 .o.a 文件(C/C++ 编译生成的文件):
    *.o
    *.a
    
(2) 忽略目录

你可以通过指定目录名来忽略整个目录。

示例:
  • 忽略 build/ 目录(常见于构建后的产物):

    build/
    
  • 忽略 install/ 目录(通常用于存放编译生成的可执行的文件):

    install/
    
(3) 忽略特定文件

你可以通过指定文件的相对路径来忽略特定的文件。

示例:
  • 忽略 secret.txt 文件:

    secret.txt
    
  • 忽略 config/config.json 文件:

    config/config.json
    
(4) 忽略 IDE 和编辑器配置文件

很多 IDE 和编辑器(如 VSCode、IntelliJ、Sublime Text)会生成一些配置文件,这些文件通常不需要提交到 Git 仓库中。

示例:
  • 忽略 VSCode 配置文件:
    .vscode/
    
3. 提交更改到版本库
git commit -m "提交描述"          # 提交暂存区内容
git commit -am "提交描述"         # 自动添加修改文件并提交(不包含新文件)
git commit --amend               # 修改最近一次提交(可修改描述或追加文件)

三、分支管理

1. 基础分支操作
git branch              # 查看本地分支
git branch <分支名>      # 创建新分支
git switch <分支名>      #切换分支
git checkout <分支名>    # 切换分支,恢复文件(当分支名与文件名相同时存在歧义)
git checkout -b <分支名> # 创建并切换分支(常用)
git branch -d <分支名>   # 删除已合并的分支
git branch -D <分支名>   # 强制删除未合并分支
git branch -m <name>    #修改当前分支名
2. 合并与冲突解决
  • 假设想要合并A分支和B分支,要切换到一个分支,此处举例切换到A,然后用git merge B来把B合并到A分支中
  • 如果分支中对同一处代码进行了修改,git不知道应该以谁为准的时候就会出现冲突。这时候要手动解决冲突。
git merge <分支名>       # 合并指定分支到当前分支
git merge --abort       # 终止合并(冲突时)
git rebase <分支名>      # 变基操作(线性历史)
git rebase --abort      # 终止变基

解决合并冲突流程

  1. 用编辑器打开冲突文件(搜索 <<<<<<<
  2. 手动修改保留需要的代码
  3. 删除冲突标记
  4. 执行 git add <冲突文件>
  5. 完成合并:git commit

四、远程仓库操作

1. 关联远程仓库
git remote add origin <url>     # 添加远程仓库(命名为 origin)
git remote -v                   # 查看远程仓库地址
git remote remove origin        # 删除远程仓库
2. 推送与拉取

注意,当本地仓库分支名与远程仓库分支名相同时,才会更新到远程仓库的同名分支下,如果不同名,会自动创建新的分支来提交。

git push -u <远程仓库名> <本地仓库分支名>         # 首次推送并设置上游分支
git push                        # 当本地仓库关联多个仓库的时候,要加上推送到的仓库名
git pull                        # 拉取并合并(= git fetch + git merge)
git fetch                       # 仅获取远程更新(不自动合并)
git push -u origin main       #-u 选项的作用是将指定的分支与远程仓库中的某个分支进行关联#-f强制推送
3. 远程分支管理
git push origin --delete <分支名>  # 删除远程分支
git checkout -b <本地分支> origin/<远程分支>  # 基于远程分支创建本地分支

五、撤销与历史修改

1. 撤销工作区修改
git checkout HEAD -- <file>   # 用最新提交覆盖工作区文件
git restore --staged <file>   # 取消暂存(Git 2.23+)
2. 重置提交历史
git reset --soft HEAD~1   # 撤销提交但保留修改在暂存区、工作区
git reset --mixed HEAD~1  # 撤销提交并取消暂存(默认),工作区保留
git reset --hard HEAD~1   # 彻底丢弃最近一次提交的所有修改(工作区暂存区全部丢弃)

在这里插入图片描述

3. 回滚提交
git revert <commit-hash>  # 创建反向提交来撤销指定提交

六、标签管理

git tag                     # 查看所有标签
git tag v1.0.0              # 创建轻量标签
git tag -a v1.0.0 -m "描述"  # 创建附注标签
git push origin --tags      # 推送所有标签到远程
git checkout v1.0.0         # 切换到标签版本

七、高级功能

1. 储藏(Stash)临时修改
git stash              # 储藏当前工作区修改
git stash list         # 查看储藏列表
git stash apply        # 恢复最新储藏(保留储藏记录)
git stash pop          # 恢复并删除最新储藏
git stash drop stash@{0} # 删除指定储藏
2. 查看历史
git log --oneline      # 简洁历史记录
git log -p             # 显示具体修改内容
git log --graph        # 图形化分支历史
git blame <file>       # 查看文件每行修改者
3. 子模块(Submodule)
git submodule add <url> <path>  # 添加子模块
git submodule update --init     # 初始化子模块

八、常用工作流示例

1. 日常开发流程
git checkout -b feature/new-login  # 创建特性分支
# 修改代码...
git add .
git commit -m "实现登录功能"
git push origin feature/new-login
# 在 Git 平台创建 Pull Request
2. 紧急修复线上 Bug
git checkout main
git pull
git checkout -b hotfix/header-bug
# 修复代码...
git commit -m "修复页头布局问题"
git checkout main
git merge hotfix/header-bug
git push

注意事项

  1. 慎用 --force:强制推送可能覆盖他人工作
  2. 重要操作前备份:复杂操作前先 git stash 或创建临时分支
  3. 保持提交原子性:每个提交只做一件事,描述清晰
  4. 定期清理分支:删除已合并的废弃分支

遇到问题时,多用 git status 查看状态,善用 git reflog 找回误删内容。


我误以为命运掌握在别人手里,而没有意识到我可以为自己的人生执笔。 —塞巴斯蒂安·巴里

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

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

相关文章

Deepseek 接入Word处理对话框(隐藏密钥)

硅基流动邀请码&#xff1a;1zNe93Cp 邀请链接&#xff1a;网页链接 亲测deepseek接入word&#xff0c;自由调用对话&#xff0c;看截图有兴趣的复用代码&#xff08;当然也可以自己向deepseek提问&#xff0c;帮助你完成接入&#xff0c;但是提问逻辑不一样给出的答案是千差万…

Redis存储⑤Redis五大数据类型之 List 和 Set。

目录 1. List 列表 1.1 List 列表常见命令 1.2 阻塞版本命令 1.3 List命令总结和内部编码 1.4 List典型使用场景 1.4.1 消息队列 1.4.2 分频道的消息队列 1.4.3 微博 Timeline 2. Set 集合 2.1 Set 集合常见命令 2.2 Set 集合间命令 2.3 Set命令小结和内部编码 2.…

DeepSeek 的含金量还在上升

大家好啊&#xff0c;我是董董灿。 最近 DeepSeek 越来越火了。 网上有很多针对 DeepSeek 的推理测评&#xff0c;除此之外&#xff0c;也有很多人从技术的角度来探讨 DeepSeek 带给行业的影响。 比如今天就看到了一篇文章&#xff0c;探讨 DeepSeek 在使用 GPU 进行模型训练…

深入剖析 Bitmap 数据结构:原理、应用与优化策略

深入理解 Bitmap 数据结构 一、引言 在计算机科学领域&#xff0c;数据的高效存储和快速处理一直是核心问题。随着数据量的不断增长&#xff0c;如何用最少的空间和最快的速度来表示和操作数据变得至关重要。Bitmap&#xff08;位图&#xff09;作为一种简洁而强大的数据结构…

【后端开发】系统设计101——通信协议,数据库与缓存,架构模式,微服务架构,支付系统(36张图详解)

【后端开发】系统设计101——通信协议&#xff0c;数据库与缓存&#xff0c;架构模式&#xff0c;微服务架构&#xff0c;支付系统&#xff08;36张图&#xff09; 文章目录 1、通信协议通信协议REST API 对比 GraphQL&#xff08;前端-web服务&#xff09;grpc如何工作&#x…

DS图(中)(19)

文章目录 前言一、图的遍历广度优先遍历深度优先遍历 二、最小生成树Kruskal算法Prim算法两种方法对比 总结 前言 承上启下&#xff0c;我们来学习下图的中篇&#xff01;&#xff01;&#xff01; 一、图的遍历 图的遍历指的是遍历图中的顶点&#xff0c;主要有 广度优先遍历 …

DeepSeek 发布多模态 Janus-Pro

DeepSeek在接连发布大语言模型V3&#xff0c;推理模型R1之后&#xff0c;DeepSeek随后又发布两款多模态框架&#xff1a;Janus-Pro 与 JanusFlow &#xff0c;引领多模态模型新时代&#xff01; 而且依然是保持了一贯的风格&#xff0c;保持了完全开源&#xff0c;今天我们来看…

【QT笔记】使用QScrollArea实现多行文本样式显示

目录 一、QScrollArea 的基本概念 二、demo代码 三、实现效果 1、页面空间足够&#xff0c;无滚动条时显示效果 2、有滚动条时显示效果 一、QScrollArea 的基本概念 QScrollArea 是 Qt 框架中用于提供一个滚动条区域&#xff0c;允许用户滚动查看比当前可视区域更大的内容…

达梦数据库从单主模式转换为主备模式

目录标题 达梦数据库单主转主备配置笔记前期准备服务器环境数据库安装磁盘空间 流程流程图说明 详细步骤1. 检查主库归档模式2. 配置主库配置文件dm.ini 文件dmmal.ini 文件dmarch.ini 文件 3. 备份主库数据库4. 备库配置新建备库数据库配置备库配置文件dm.ini 文件复制主库的 …

使用C#开发一款通用数据库管理工具

由于经常使用各种数据库&#xff0c;笔者自己动手丰衣足食&#xff0c;使用C#开发了一款通用数据库管理工具&#xff0c;支持Mysql、Oracle、Sqlite、SQL Server等数据库的表、视图、存储过程、函数管理功能&#xff0c;并支持导入导出、数据字典生成、拖拽式跨机器跨库数据一键…

w193基于Spring Boot的秒杀系统设计与实现

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

DeepSeek各版本说明与优缺点分析

DeepSeek各版本说明与优缺点分析 DeepSeek是最近人工智能领域备受瞩目的一个语言模型系列&#xff0c;其在不同版本的发布过程中&#xff0c;逐步加强了对多种任务的处理能力。本文将详细介绍DeepSeek的各版本&#xff0c;从版本的发布时间、特点、优势以及不足之处&#xff0…

OpenCV:特征检测总结

目录 一、什么是特征检测&#xff1f; 二、OpenCV 中的常见特征检测方法 1. Harris 角点检测 2. Shi-Tomasi 角点检测 3. Canny 边缘检测 4. SIFT&#xff08;尺度不变特征变换&#xff09; 5. ORB 三、特征检测的应用场景 1. 图像匹配 2. 运动检测 3. 自动驾驶 4.…

windows版的docker如何使用宿主机的GPU

windows版的docker使用宿主机的GPU的命令 命令如下 docker run -it --nethost --gpus all --name 容器名 -e NVIDIA_DRIVER_CAPABILITIEScompute,utility -e NVIDIA_VISIBLE_DEVICESall 镜像名效果 (transformer) rootdocker-desktop:/# python Python 3.9.0 (default, Nov 15 …

neo4j-在Linux中安装neo4j

目录 切换jdk 安装neo4j 配置neo4j以便其他电脑可以访问 切换jdk 因为我安装的jdk是1.8版本的&#xff0c;而我安装的neo4j版本为5.15,Neo4j Community 5.15.0 不支持 Java 1.8&#xff0c;它要求 Java 17 或更高版本。 所以我需要升级Java到17 安装 OpenJDK 17 sudo yu…

8.PPT:小李-第二次世界大战【21】

目录 NO123 ​ NO4567 ​ NO8\9\10\11​ 图片→格式→大小对话框→锁定纵横比✔动画→飞入→效果选项&#xff1a;方向/序列→开始→持续时间→延迟时间持续时间&#xff1a;1s延迟&#xff1a;0.5s音频剪切时间&#xff1a;0.5s&#xff1a;00:00.500自动换片时间设置&…

GAN(生成对抗网络,Generative Adversarial Network)

https://www.bilibili.com/video/BV1mp4y187dm/?spm_id_from333.788.recommend_more_video.2&vd_source35b06c13f470dff84c947fa3045bafc3

【C++】多态详细讲解

本篇来聊聊C面向对象的第三大特性-多态。 1.多态的概念 多态通俗来说就是多种形态。多态分为编译时多态(静态多态)和运⾏时多态(动态多态)。 编译时多态&#xff1a;主要就是我们前⾯讲的函数重载和函数模板&#xff0c;他们传不同类型的参数就可以调⽤不同的函数&#xff0c;通…

NeuralCF 模型:神经网络协同过滤模型

实验和完整代码 完整代码实现和jupyter运行&#xff1a;https://github.com/Myolive-Lin/RecSys--deep-learning-recommendation-system/tree/main 引言 NeuralCF 模型由新加坡国立大学研究人员于 2017 年提出&#xff0c;其核心思想在于将传统协同过滤方法与深度学习技术相结…

【自动化办公】批量图片PDF自定义指定多个区域识别重命名,批量识别铁路货物运单区域内容改名,基于WPF和飞桨ocr深度学习模型的解决方案

项目背景介绍 铁路货运企业需要对物流单进行长期存档&#xff0c;以便后续查询和审计。不同的物流单可能包含不同的关键信息&#xff0c;通过自定义指定多个区域进行识别重命名&#xff0c;可以使存档的图片文件名具有统一的规范和明确的含义。比如&#xff0c;将包含货物运单…