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.rhkb.cn/news/14083.html

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

相关文章

力扣.270. 最接近的二叉搜索树值(中序遍历思想)

文章目录 题目描述思路复杂度Code 题目描述 思路 遍历思想(利用二叉树的中序遍历) 本题的难点在于可能存在多个答案&#xff0c;并且要返回最小的那一个&#xff0c;为了解决这个问题&#xff0c;我门则要利用上二叉搜索树中序遍历为有序序列的特性&#xff0c;具体到代码中&a…

7个国内能打开的AI绘画网站!新手福音!

以下是我收集的国内能打开的AI绘画网站。 1、6pen 网址&#xff1a;https://6pen.art/ 2、文心大模型 网址&#xff1a;https://wenxin.baidu.com/moduleApi/ernieVilg 3、Draft 网址&#xff1a;https://draft.art/ai- art/drawing 4、nightcafe 网址&#xff1a;https:/…

Redis数据库篇 -- Pipeline

一. 什么是Pipeline 在传统的请求-响应模式中&#xff0c;客户端与服务器之间的通信流程如下&#xff1a; 客户端发送一个命令到服务器。服务器接收命令并执行。服务器将执行结果返回给客户端。客户端接收结果后&#xff0c;发送下一个命令 在这种传统的模式下&#xff0c;…

Baumer工业相机堡盟相机的相机传感器芯片清洁指南

Baumer工业相机堡盟相机的相机传感器芯片清洁指南 Baumer工业相机1.Baumer工业相机传感器芯片清洁工具和清洁剂2.Baumer工业相机传感器芯片清洁步骤2.1、准备步骤2.2、清洁过程1.定位清洁工具2.清洁传感器3&#xff0e;使用吹风装置 Baumer工业相机传感器芯片清洁的优势设计与结…

【OS】AUTOSAR架构下的Interrupt详解(下篇)

目录 3.代码分析 3.1中断配置代码 3.2 OS如何找到中断处理函数 3.3 Os_InitialEnableInterruptSources实现 3.4 Os_EnableInterruptSource 3.5 DisableAllInterrupts 3.5.1Os_IntSuspendCat1 3.5.2 Os_InterruptDisableAllEnter 3.5.3 Disable二类中断 3.5.4 Disable一…

ASP.NET Core中间件Markdown转换器

目录 需求 文本编码检测 Markdown→HTML 注意 实现 需求 Markdown是一种文本格式&#xff1b;不被浏览器支持&#xff1b;编写一个在服务器端把Markdown转换为HTML的中间件。我们开发的中间件是构建在ASP.NET Core内置的StaticFiles中间件之上&#xff0c;并且在它之前运…

idea 找不到或者无法加载主类

idea项目&#xff0c;之前一直是正常运行的&#xff0c;放假了之后再回来就遇到启动不了的问题。 WebApplication这个类右键运行的时候&#xff0c;也提示找不到主类。 对于这种之前运行没有问题&#xff0c;突然出问题的项目。 我的点是没有改动代码和数据的情况下项目就跑不起…

DeepSeek R1 Distill Llama 70B(免费版)API使用详解

DeepSeek R1 Distill Llama 70B&#xff08;免费版&#xff09;API使用详解 在人工智能领域&#xff0c;随着技术的不断进步&#xff0c;各种新的模型和应用如雨后春笋般涌现。今天&#xff0c;我们要为大家介绍的是OpenRouter平台上提供的DeepSeek R1 Distill Llama 70B&…

基于SpringBoot养老院平台系统功能实现六

一、前言介绍&#xff1a; 1.1 项目摘要 随着全球人口老龄化的不断加剧&#xff0c;养老服务需求日益增长。特别是在中国&#xff0c;随着经济的快速发展和人民生活水平的提高&#xff0c;老年人口数量不断增加&#xff0c;对养老服务的质量和效率提出了更高的要求。传统的养…

新能源产业的质量革命:六西格玛培训如何重塑制造竞争力

在新能源行业狂飙突进的今天&#xff0c;企业若想在全球供应链中占据高地&#xff0c;仅靠技术突破已远远不够。制造效率的毫厘之差&#xff0c;可能成为市场话语权的千里之距。某光伏巨头曾因电池片良率低于行业均值1.5%&#xff0c;导致年损失超2.3亿元——这恰恰印证了六西格…

额外题目汇总2-链表

链表 1.24. 两两交换链表中的节点 力扣题目链接(opens new window) 给定一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后的链表。 你不能只是单纯的改变节点内部的值&#xff0c;而是需要实际的进行节点交换。 思路 使用虚拟头结点会很方便&#xff…

pytest-xdist 进行多进程并发测试!

在软件开发过程中&#xff0c;测试是确保代码质量和可靠性的关键步骤。随着项目规模的扩大和复杂性的增加&#xff0c;测试用例的执行效率变得尤为重要。为了加速测试过程&#xff0c;特别是对于一些可以并行执行的测试用 例&#xff0c;pytest-xdist 提供了一种强大的工具&…

化学-基础知识一

文章目录 1、物质分类2、离子反应3、氧化还原反应4、物质的量5、电子排布式6、元素周期表 化学基础知识&#xff0c;物质分类、离子反应、氧化还原反应、物质的量、电子排布式、元素周期表 1、物质分类 物质广泛分为混合物和纯净物&#xff0c;纯净物是主要研究对象&#xff1b…

Pycharm调试Deepseek API

本文主要是使用pycharm工具测试调用DeepSeek API 1、deepseek官网注册账号 DeepSeek 2、创建API key&#xff08;注意&#xff1a;复制保存好API key&#xff0c;因为出于安全原因&#xff0c;你将无法通过 API keys 管理界面再次查看它&#xff09; 3、pycharm创建新项目和c…

Java使用aspose实现pdf转word

Java使用aspose实现pdf转word 一、下载aspose-pdf-21.6.jar包【下载地址】&#xff0c;存放目录结构如图&#xff1b;配置pom.xml。 <!--pdf to word--> <dependency><groupId>com.aspose</groupId><artifactId>aspose-pdf</artifactId>…

检索式知识库问答相关研究调研

基于信息检索的知识库问答存在以下问题 一、问题解析阶段 复杂问题解析 1.问题中包括多个实体&#xff1a;(i)使用卷积操作捕获每个词的上下文特征&#xff1b;(ii)使用大语言模型对问题进行凝练&#xff0c;保留关键信息&#xff1b;(iii)采用思维链的方式对问题进行分解&am…

Python基于Django的课堂投票系统的设计与实现【附源码】

博主介绍&#xff1a;✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…

C++ Primer 数组

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

CPU的基本结构

基本结构 控制器&#xff08;Control Unit&#xff09;&#xff1a;负责控制&#xff0c;如指令计数器&#xff0c;指令跳转。 算术逻辑控制器&#xff08;Arithmetic/Logic Unit&#xff09;&#xff1a;负责计算&#xff0c;如算术运算加减&#xff0c;逻辑比较大小等。 南北…

git SourceTree 使用

Source Tree 使用原理 文件的状态 创建仓库和提交 验证 再克隆的时候发发现一个问题&#xff0c;就是有一个 这个验证&#xff0c;起始很简单 就是 gitee 的账号和密码&#xff0c;但是要搞清楚的是账号不是名称&#xff0c;我之前一直再使用名称登录老是出问题 这个很简单的…