实习技能记录【3】-----Git操作

1. Git是什么

Git 是一个分布式版本控制系统 (Distributed Version Control System, DVCS)。 它的核心目标是跟踪文件的变化,让你能够随时记录、回溯、协作和管理你的项目。

2. 介绍

2.1 Git 工作区、暂存区、本地仓库介绍

区域名称英文名说明相关命令
工作区Working Directory你当前编辑的目录,包含所有可见的项目文件git status, git checkout
暂存区Staging Area / Index暂时保存你准备提交的文件修改(git add 后进入)git add, git reset
本地仓库Local Repository提交后的版本快照,存储于 .git 目录中git commit, git log
远程仓库(可选)Remote RepositoryGitHub、Gitee 等远程平台上的仓库,用于多人协作git push, git pull

2.2 文件生命周期(状态流转)

编辑文件 → git add → git commit → git push
工作区     暂存区       本地仓库      远程仓库

2.3 状态变更图示(简单流程)

[工作区] --git add--> [暂存区] --git commit--> [本地仓库] --git push--> [远程仓库]↑                               ↓                              ↑修改                         git reset HEAD file             git pull↑                                                           ↓
恢复(checkout)                                               拉取更新

3. 操作

指令说明示例
git status查看当前工作区和暂存区状态git status
git add <file>将文件加入暂存区,准备提交git add main.c
git add .添加当前目录下所有更改文件到暂存区git add .
git diff查看工作区和暂存区之间的差异(未暂存的修改)git diff
git diff --cached查看暂存区和最后一次 commit 的差异(已暂存未提交)git diff --cached
git commit -m "msg"提交暂存区内容到本地仓库,并附带提交说明git commit -m "fix bugs"
git log查看提交历史记录git log
git reset HEAD <file>从暂存区移除文件(但保留工作区更改)git reset HEAD main.c
git checkout -- <file>撤销工作区修改,恢复成最后一次 commit 的内容git checkout -- main.c
git reset --soft HEAD~1撤销最近一次 commit,保留更改在暂存区git reset --soft HEAD~1
git reset --mixed HEAD~1撤销最近一次 commit,保留更改在工作区(默认方式)git reset --mixed HEAD~1
git reset --hard HEAD~1撤销最近一次 commit,且清除所有更改(慎用!)git reset --hard HEAD~1
git log --oneline简洁查看提交历史(每条一行)git log --oneline
git reflog查看 HEAD 引用日志,找回丢失的提交git reflog
git stash暂存当前所有修改(保存工作进度)git stash
git stash pop恢复最近一次 stash 并删除git stash pop
git stash apply应用最近一次 stash(不删除)
git rm删除工作区和暂存区的文件git rm file

4. 忽略文件

.gitignore
以下文件需要被忽略:

  • 系统或者软件自动生成的文件
  • 编译产生的中间文件和结果文件
  • 运行时生成日志文件、缓存文件、临时文件
    涉及身份、密码、口令、秘钥等敏感文件

匹配规则:

按行从上到下匹配
# 代表注释
* 匹配多个字符
? 匹配单个字符
[ ]表示匹配列表中的单个字符,比如:[abc] 表示a/b/c
** 表示匹配任意的中间目录中括号可以使用短中线连接,比如:[0-9]表示任意一位数字,[a-z]表示任意一位小写字
! 表示取反

示例

忽略所有的 .a 文件
但跟踪所有的 lib.a,即便你在前面忽略了.a 文件
!lib.a
只忽略当前目录下的TOD0 文件,而不忽略subdir/ToD0
/TOD0
# 忽略任何目录下名为 build 的文件夹
build/
忽略 doc/notes.txt,”但不忽略 doc/server/arch.txt
doc/*.txt
忽略 doc/目录及其所有子目录下的·pdf 文件
doc/**/*.pdf

👿注意,github官网有不同语言的gitignore模板,可以直接使用

5. SSH配置

远程仓库和本地仓库同步的方式
https已不再使用
推荐使用ssh
ssh公钥和密钥的关系:

+-----------------+      +-----------------+
|     你的电脑     |----->|     远程服务器   |
| (拥有私钥)      |      | (拥有公钥)      |
+-----------------+      +-----------------+

配置密钥流程
Windows:

1.ssh-keygen -t rsa -b 4096 -c "邮箱"
生成的密钥一般在:C:\Users\<你的用户名>\.ssh\
2.然后将rsa.pub内的内容添加到github上
3.测试命令行输入:ssh -T git@github.com
4.若通过则可以直接使用git clone ssh地址
5.不通过需要看下方提示

Linux:

cd .ssh
ssh-keygen -t rsa -b 4096

🤓若无法连接,可以尝试:
~/.ssh/下创建config文件
添加内容:

# github
Host github.com
HostName ssh.github.com
Port 443

6. 远程仓库和本地仓库关联

1.关联本地仓库和远程仓库git remote add origin <远程仓库的 URL>1.1 查看本地关联的仓库git remote -v
2.推送本地仓库git push -u 远程仓库别名 本地分支:远程分支
3.拉取远程仓库自动合并git pull手动合并git fetch

7. 分支

Git 的分支(branch)功能允许你在版本库中创建多个开发线索,使你可以在不影响主线(如 main )的情况下开发新功能、修复 bug 等。

✅ 主要用途

  • 并行开发不同功能
  • 实验新特性
  • 快速 bug 修复
  • 提高协作效率

🛠️ 常用 Git Branch 操作

1.创建新分支git branch 分支名
2.切换分支git checkout 分支名# 或 Git 2.23+ 版本git switch 分支名
3.查看分支列表git branch
4.合并分支git switch 分支名
5.删除分支git branch -d 分支名 (已合并)git branch -D 分支名 (未合并)

8. 解决分支冲突

想象一下你和你的团队成员正在同一个 Git 仓库并行开发不同的功能或修复不同的 bug。每个人都在自己的分支上工作,这样可以保持主线代码的稳定,并且让不同的开发任务相互隔离。
当以下两种情况同时发生时,就可能产生分支冲突:

  • 不同的分支修改了同一文件的相同部分。 这意味着你和你的同事可能在同一文件的同一行或相邻的几行代码上做了不同的更改。
  • 其中一个分支的更改被合并(git merge)或变基(git rebase)到另一个分支时。 Git 在尝试自动合并这些不同的修改时,发现无法确定最终应该保留哪个版本

简单来说,分支冲突就是 Git 在合并或变基分支时,遇到对同一文件相同部分的冲突修改,不知道应该采纳哪个版本而需要人为介入解决的情况

情景

  1. master分支修改了main1.txt 第一行
  2. dev分支修改了main1.txt 第一行
  3. master commit 修改
  4. dev commit 修改
  5. master merge dev
  6. 冲突产生,需要手动修改和保留,合并冲突内容
  7. 添加暂存区
  8. 提交修改

若不想继续合并,执行git merge --abort终止合并过程

回退和rebase(变基操作)

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

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

相关文章

蓝桥杯单片机刷题——按键设置当前采集距离为距离参数

设计要求 驱动超声波传感器&#xff0c;启动距离测量功能,并将其结果显示到数码管上。 按键“S5”定义为参数按键&#xff0c;按下S5按键&#xff0c;设备自动将当前采集的距离数据作为距离参数&#xff1b; 若测量的距离数据超过距离参数&#xff0c;指示灯L1点亮&#xff…

KV Cache大模型推理加速功能

KV Cache KV Cache是大模型标配的推理加速功能&#xff0c;也是推理过程中&#xff0c;显存资源巨大开销的元凶之一。在模型推理时&#xff0c;KV Cache在显存占用量可达30%以上。 目前大部分针对KV Cache的优化工作&#xff0c;主要集中在工程上。比如著名的VLLM&#xff0c…

Windows 图形显示驱动开发-WDDM 2.0功能_上下文监视

功能概述 上下文监视机制是GPU与CPU协同计算的核心同步技术&#xff0c;通过受监视围栏&#xff08;Monitored Fence&#xff09;实现跨硬件单元的高效协调。其核心目标是解决以下场景的同步需求&#xff1a; GPU引擎间同步&#xff1a;例如在多渲染管线中&#xff0c;后处理…

基于YOLOv8的机场跑道异物检测识别系统:提升航空安全的新一代解决方案(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​​​ ​​​​​​​​​ ​​ 1. 机场跑道异物检测领域概述 机场跑道异物(Foreign Object Debris, FOD)是指存在于机场跑道、滑行道等关…

网络协议学习

最近在适配ESP32的网络驱动&#xff0c;借此机会先学习一下网络通信协议。 以太网帧、IP包及TCP与UDP的报文格式一文读懂网络报问中的检验和&#xff08;checksum&#xff09;—— 原理举例代码 提问腾讯元宝提示词&#xff1a; TCP窗口是干什么的拥塞窗口是什么的

fit 转 gpx

新增 fit 转 gpx 功能 https://fittools.cc/home/fit2gpx

C++ I/O 性能优化指南

在高性能计算和大规模数据处理中&#xff0c;I/O 性能优化是提升系统整体效率的关键环节。C 作为一种高性能编程语言&#xff0c;提供了丰富的工具和机制来优化 I/O 操作。本文将详细介绍在 Linux 环境下&#xff0c;如何通过代码层面的优化、系统调用的选择以及多线程技术等手…

Python中内置的数据结构类型详析(内置数据容器)

目录 1. 元组&#xff08;Tuple&#xff09;​​2. 列表&#xff08;List&#xff09;​3. 字典&#xff08;Dict&#xff09;4. 集合&#xff08;Set&#xff09;​​5. 字符串&#xff08;Str&#xff09;6. 队列&#xff08;Queue&#xff09;与栈&#xff08;Stack&#xf…

Socket多路复用网络编程应用总结

Socket多路复用网络编程应用总结 概述 • 传统I/O模型的局限性&#xff1a;传统阻塞式I/O模型每次仅在一个文件描述符&#xff08;File Descriptor, FD&#xff09;上执行I/O操作&#xff0c;导致程序需等待单个操作完成&#xff0c;无法高效处理多连接场景&#xff08;如高并…

安卓开发提示Android Gradle plugin错误

The project is using an incompatible version (AGP 8.9.1) of the Android Gradle plugin. Latest supported version is AGP 8.8.0-alpha05 See Android Studio & AGP compatibility options. 改模块级 build.gradle&#xff08;如果有独立配置&#xff09;&#xff1a;…

【C++初阶】--- vector容器功能模拟实现

1.什么是vector&#xff1f; 在 C 里&#xff0c;std::vector 是标准模板库&#xff08;STL&#xff09;提供的一个非常实用的容器类&#xff0c;它可以看作是动态数组 2.成员变量 iterator _start;&#xff1a;指向 vector 中第一个元素的指针。 iterator _finish;&#x…

分布式锁在秒杀场景中的Python实现与CAP权衡

目录 一、分布式锁的前世今生 二、秒杀系统的 “硬核” 挑战 三、Python 实现分布式锁的 “实战演练” Redis 实现:快准狠 ZooKeeper 实现:稳如老狗 数据库实现:老实本分 四、CAP 理论的 “三角恋” 五、性能优化的 “锦囊妙计” 锁粒度控制:粗细有道 超时机制:别…

企业级开发SpringBoost玩转Elasticsearch

案例 Spring Boot 提供了 spring-data-elasticsearch 模块&#xff0c;可以方便地集成 Elasticsearch。 下面我们将详细讲解如何在 Spring Boot 中使用 Elasticsearch 8&#xff0c;并提供示例代码。 1. 添加依赖: 首先&#xff0c;需要在 pom.xml 文件中添加 spring-data-e…

磐石云智能语音客服系统——技术革新引领服务新体验

在人工智能技术飞速发展的今天&#xff0c;企业对于智能化客户服务的需求日益增长。磐石云智能语音客服系统凭借其前沿技术架构与深度场景适配能力&#xff0c;正在重新定义人机交互的边界。本文将深入解析该系统如何通过技术创新实现服务效率与体验的双重突破。 一、意图识别…

OpenGL学习笔记(assimp封装、深度测试、模板测试)

目录 模型加载Assimp网格模型及导入 深度测试深度值精度深度缓冲的可视化深度冲突 模板测试物体轮廓 GitHub主页&#xff1a;https://github.com/sdpyy1 OpenGL学习仓库:https://github.com/sdpyy1/CppLearn/tree/main/OpenGLtree/main/OpenGL):https://github.com/sdpyy1/CppL…

通过AWS EKS 生成并部署容器化应用

今天给大家分享一个实战例子&#xff0c;如何在EKS上创建容器化应用并通过ALB来发布。先介绍一下几个基本概念&#xff1a; IAM, OpenID Connect (OIDC) 2014 年&#xff0c;AWS Identity and Access Management 增加了使用 OpenID Connect (OIDC) 的联合身份支持。此功能允许…

入侵检测snort功能概述

1. 数据包嗅探与日志记录 网络流量监控&#xff1a;实时捕获和分析网络数据包&#xff08;支持以太网、无线等&#xff09;。 日志记录&#xff1a;将数据包以二进制格式&#xff08;pcap&#xff09;或文本格式存储&#xff0c;供后续分析。 2. 协议分析与解码 深度协议解析…

【Easylive】定时任务-每日数据统计和临时文件清理

【Easylive】项目常见问题解答&#xff08;自用&持续更新中…&#xff09; 汇总版 这个定时任务系统主要包含两个核心功能&#xff1a;每日数据统计和临时文件清理。下面我将详细解析这两个定时任务的实现逻辑和技术要点&#xff1a; Component Slf4j public class SysTas…

蓝桥杯 15g

班级活动 问题描述 小明的老师准备组织一次班级活动。班上一共有 nn 名 (nn 为偶数) 同学&#xff0c;老师想把所有的同学进行分组&#xff0c;每两名同学一组。为了公平&#xff0c;老师给每名同学随机分配了一个 nn 以内的正整数作为 idid&#xff0c;第 ii 名同学的 idid 为…

如何使用AI辅助开发R语言

R语言是一种用于统计计算和图形生成的编程语言和软件环境&#xff0c;很多学术研究和数据分析的科学家和统计学家更青睐于它。但对与没有编程基础的初学者而言&#xff0c;R语言也是有一定使用难度的。不过现在有了通义灵码辅助编写R语言代码&#xff0c;我们完全可以用自然语言…