本地Git基础知识

news2026/5/8 4:18:42
本地Git基础知识文章目录本地Git基础知识初识GitGit核心概念初始配置.bashrc获取本地仓库基础操作指令基础命令**添加文件至忽略列表**分支查看差异变基暂时清空暂存区初识Git为什么需要版本控制器简单来说当我们修改代码后发现程序崩溃想要回到之前的版本时如果没有版本控制工具就只能靠CtrlZ或者祈祷了这时版本控制器就像时光机一样让我们可以自由穿梭在代码的各个版本之间以便我们更好更安全的修改代码版本控制器集中式版本控制SVNCVS分布式版本控制GitGit就是一个分布式版本控制系统由Linux之父Linus Torvalds在2005年创建记录每次文件的改动回到任意历史版本多人协作开发不会互相覆盖代码并行开发功能分支管理互不干扰不同于SVN等集中式版本控制系统Git的分布式架构意味着每个人电脑上都有完整的代码仓库即使服务器挂了你仍然可以本地提交、查看历史离线也能工作有网络时再同步Git会对所有文件内容进行校验和计算使用SHA-1哈希算法保证任何文件改动都会被检测到所以你可以放心只要提交到Git数据就不会丢失或损坏Git GUI Git提供的图形界面工具Git BashGit提供的命令行工具Git核心概念在开始使用Git之前需要理解几个关键概念工作区 → 暂存区 → 版本库(你的文件夹)(准备提交)(永久存储)工作区就是你电脑上能看到的项目文件夹暂存区临时存放你的改动决定哪些改动要提交版本库仓库Git存储所有版本数据的地方Git管理的文件有三种状态已修改(modified)文件改了但还没存到暂存区已暂存(staged)改动的文件已经添加到暂存区等待提交已提交(committed)文件已经安全保存在版本库中初始配置当你第一次安装Git需要先进行一些基本设置才能更好地使用这些配置只需要做一次Git会记住它们Git的每次提交都会记录提交者的信息想象一下团队协作时如果不配置别人就不知道这段代码是谁写的出了问题也不知道找谁。所以第一件事就是告诉Git我是谁”所以我们的第一步就是配置你的基础信息设置用户信息git config –global user.name “”git config –global user.email “”查看配置信息git config –global user.namegit config –global user.email配置有三种级别git config –local只对某个仓库有效git config –global对当前用户所有仓库有效git config –system对系统所有登录的用户有效优先级仓库配置 全局配置 系统配置越具体的配置优先级越高显示config的配置git config –list –localgit config –list –globalgit config –list –system配置文件存在哪里系统配置/etc/gitconfig全局配置~/.gitconfig或~/.config/git/config仓库配置.git/config.bashrc.bashrc是Bash shell 的用户级配置文件默认存放在用户主目录~/.bashrc或C:\Users\你的用户名\.bashrcGit Bash核心作用是每次打开一个新的 Bash 终端窗口 / 会话时自动执行这个文件里的命令帮你定制终端的行为和环境定义别名「等号前后不要有空格」是通用规范#把 ls -l显示详细文件信息简化成 llaliasllls -l#ls -al中-a是显示所有文件包括隐藏文件-l是以长格式显示文件/目录详细信息但不包括隐藏文件-al是显示所有文件的详细详细#常见的隐藏文件以英文句号开头示例.bashrc用户终端配置文件、.gitignoreGit 忽略规则文件、.sshSSH 密钥目录#输出git提交日志aliasgit-loggit log --prettyoneline --all --graph --abbrev-commit#把 rm 增加安全提示避免误删aliasrmrm -i#自定义 Git 快捷命令aliasgpullgit pullaliasgpushgit push配置环境变量#解决乱码问题gitconfig--globalcore.quotepathfalse#添加自定义程序路径让系统能找到你的程序exportPATH$PATH:/home/你的用户名/my_program#设置 Python 虚拟环境默认路径exportWORKON_HOME~/.virtualenvs#设置终端编码避免中文乱码exportLC_ALLen_US.UTF-8配置PATH后你不用输完整路径就能运行自己写的脚本 / 程序定制终端外观#自定义提示符显示「用户名主机名 路径 $」PS1\u\h \w $修改后终端提示符会从默认的$变成xxxxxx ~/code $更直观自动执行初始化命令#自动进入常用工作目录cd~/projects#自动激活 Python 虚拟环境source~/.venv/bin/activate#显示欢迎语/系统信息echo欢迎回来当前目录$(pwd)每次打开终端自动运行指定命令获取本地仓库在电脑任意位置创建一个空目录作为本地Git仓库进入目录右键打开Git Bash窗口执行命令git init创建成功后可在文件夹看到隐藏git目录Git 仓库本质上就是一个「包含了.git 隐藏目录的文件夹」核心结论Git 仓库 文件夹 .git 隐藏目录这些都是初始化成功后.git隐藏目录里的文件⚠️注意这里的config是本地配置由于没有单独配置所以只有【core】核心配置没有【user】段落全局配置在~/.gitconfig文件里reference引用它是一个指向 Git 提交记录commit的 “指针”相当于一个方便人类记忆的别名让你不用记住一串长长的提交哈希值比如a1b2c3d...而是用一个简单的名字比如main、dev来定位到最新的代码版本所以整句话的意思是当前HEAD指针正指向本地main分支的最新提交基础操作指令基础命令git add 添加到暂存区git status 查看状态git commit -m “备注” 提交git commit -amend 修改提交的messagegit commit -am “” 提交这是-a和-m的组合参数用于快速提交mmessage直接附带提交信息不进入编辑器aall自动暂存所有已跟踪文件的修改不包括新文件git mv 文件名 新文件名gitk 打开当前仓库的图形历史视图 --all 查看所有分支的历史git loggit log –all 显示所有分支git log –prettyoneline 将提交的信息显示为一行git log –abbrev-commit 使得输出的commit更简短git log –graph 以图的形式显示git log –decorate (mac新版参数)git reset –hard commitID 版本切换git reset HEAD 把所有暂存区恢复到工作区git checkout — 把工作区恢复成暂存区git reset HEAD — 把部分暂存区恢复到工作区git reflog 记录所有操作当你回退后clear终端后可以用这个命令分析出你回退前的版本号再进行回退git cat-file -t 对象id查看 Git 仓库中「所有底层对象」的内容 / 类型 / 大小.Git 的核心底层原理 → 【万物皆对象】Git 底层命令Git 所有上层命令git add/git commit/git branch最终都是基于它实现的「对象 ID」就是之前在 git branch -av / git log 里看到的 一串 40 位的哈希值commit idGit 里叫 SHA-1 值可以简写前 4-6 位即可Git 能自动识别✅tag → 标签对象打标签时生成比如发布版本 git tag v1.0开发中用的少暂时不用管✅commit → 提交对象每一次 git commit 都会生成 1 个 commit 对象记录「本次提交的版本信息」✅tree → 目录对象所有文件夹 / 目录都是 tree 对象比如你的 docs文件夹、仓库根目录✅blob → 文件对象所有被 Git 追踪的文件内容都是 blob 对象比如你的 README.md、笔记.txt)-t → 全称 --type核心作用查看 Git 对象的【类型】-t(查类型) -s(查大小) -p(查内容)find .git/objects -type fLinux命令搜索目录.git/objects这是 Git 仓库的核心数据库目录—— 「blob 文件对象、tree 目录对象、commit 提交对象、tag 标签对象」所有 Git 对象最终都会以文件的形式保存在这个目录里type→ 筛选「文件 / 文件夹的类型」f→ 是file的缩写代表普通文件 (regular file)如果写-type d→d是directory缩写代表「文件夹」添加文件至忽略列表可以在工作目录里创建一个名为**.gitignore**的文件文 件名固定在里面列出忽略的文件模式# no .a files*.a# but do track lib.a, even though you are ignoring .a files above!lib.a# only ignore the TODO file in the current directory,not subdir /TODO/TODO# ignore all files in the build/directorybuild/# ignore doc/notes.txt, but not doc/server/arch.txtdoc/*.txt#ignore all .pdf files in the doc/ directorydoc/**/*.pdf分支git branch 查看分支git branch -av 是-a-v简称-a是–all指查看所有分支包括远程分支-v是– verbose指显示详细信息git branch 分支名 创建分支git checkout 分支名HEAD指向当前分支 移动分支git checkout -b 分支名 创建并立即切换到新分支git checkout 4a2b3c0 当后面是提交哈希值的情况下也是移动但会进入分离头指 针的状态分离头指针简单来说就是你的当前工作目录没有指向一个具体的分支而是直接指向了某次具体的提交在这种状态下操作主要影响体现在提交与保存方面如果进行新的提交新提交可以正常创建但它们不属于任何分支。切换分支时的风险如果你此时切换到其他分支如git checkout main新提交就会变得很难找到。因为没有任何分支指向它们它们最终可能会被 Git 的垃圾回收机制清理掉它主要用于临时操作而非长期开发临时查看想查看历史中某个旧版本的代码或者验证一个 Bug 是否在特定版本存在。实验性修改只想做一些临时尝试不打算长期保存如果身处该状态但发现修改很重要立即创建一个新分支即可保护它们在 Git 里提交是否安全不取决于它在哪而取决于有没有引用分支/标签指向它git merge 分支名 合并分支git branch -d 分支名 删除分支需要做各种检查git branch -D 分支名 强制删除冲突如果同时修改了同一个文件的同一行就要手动解决冲突开发分支规范master生产分支develop开发分支feature/xxxx分支hotfix/xxxx分支查看差异git diff 查看工作目录和暂存区的差异git diff --cached / git diff --staged 查看暂存区和上次提交的差异git diff abc123 def456 查看两次提交之间的差异git diff HEAD 看当前文件和上一次提交的区别 HEAD~2 / HEAD^^ 查看当前文件和上上次 的区别diff--gita/index.js b/index.js index1234567..89abcde100644--- a/index.js // --- 表示旧版本 b/index.js // 表示新版本 -1,4 1,4 // 表示改动位置 console.log(开始);-letx10;// - 表示删除的行 let x20;// 表示添加的行 console.log(结束);变基把一系列提交从一个基础移动到另一个基础交互式rebase整理提交历史git rebase -i 哈希值. 我们最好选择要进行变基提交的父亲接下来就会出现一个交互界面下面的注释会提示你做变更的命令信息只需要将上面的命令进行修改即可比如下面就是正在修改提交信息的message 在这里我们只修改前面的pick命令接下来会弹出新的交互面执行你要的操作最后保存退出即可暂时清空暂存区当我们临时需要处理其他任务时我们需要把现在的工作区放在一边就可以用如下命令git stash可以看到执行这个命令之后我们的工作区很干净这个时候就可以去处理你的紧急任务了git stash apply该命令可以让之前工作区重新拿出来并且stash列表里不会删除记录git stash pop 这个会让stash列表里的一并清除

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…