【Git 基础】01——代码是怎么被追踪的

彻底搞懂Git文件追踪机制:为什么你的.gitignore规则总是不起作用? 本文深入解析Git文件追踪机制,揭示.gitignore规则失效的根本原因。核心在于Git索引(Index)的持久性:.gitignore仅对未追踪文件生效,一旦文件被git add纳入索引,后续忽略规则将失效。文章通过四大典型场景,详细讲解如何使用git check-ignore诊断、git rm --cached修复,并提供最佳实践,助你彻底掌握Git忽略机制。 阅读详情

​ 你可能遇到过这样的场景:改了一段代码,跑起来不对,想退回去,但上一个版本已经被覆盖了。或者和别人合作,两个人同时改了同一个文件,最后不知道该保留谁的。

​ Git就是为解决这类问题而生的。

一、git 是什么

​ git 是一个版本控制系统,它做的事情可以概括为一句话:追踪文件的变化历史。

​ 每次你告诉 git “记住现在的状态”,它就把当前所有文件的快照保存下来。之后你可以随时回到任意一个历史快照,也可以看两个版本之间改了什么。

​ 更重要的是,git 让多人协作变得可行,每个人在自己的副本上工作,git 负责把改动安全地合并在一起。

​ 你的代码放在 GitHub 上,git 就是你和 GitHub 之间的"传输协议"。在本地用 git 管理版本,用git push 把代码同步到 GitHub 上。

二、三个核心概念

​ 先搞清楚三个概念,后面的命令才有意义。

2.1 仓库(repository)

​ 仓库就是 git 管理的一个项目目录。运行 git init 之后,当前目录就变成了一个仓库,git 会在里面创建一个隐藏的 .git 文件夹,所有的版本历史都存在那里。

​ 你本地有一份仓库,GitHub 上有一份仓库,两者可以互相同步。

2.2 提交(commit)

​ commit 是版本历史里的一个节点,你手动告诉 git “把现在的状态记下来”,就生成了一个 commit。

  • 每个 commit包含:
    • 一个唯一的 ID(40 位哈希,通常用前 7 位表示,如 a3f9b12)
    • 你写的提交说明(message)
    • 当时所有文件的快照

​ commit 不是自动产生的,必须你主动触发。这和"自动保存"不同,git 不会帮你保存,它只记录你明确提交的状态。

2.3 分支(branch)

​ 分支是一条独立的开发线。默认只有一条分支(通常叫 main 或 master),你可以随时创建新分支,在上面做实验,不影响主线。

​ 一个直觉类比:main 是你的"稳定存档",新分支是"实验存档",随时可以切换,做坏了直接删掉,稳定存档不受影响。

三、基础操作流程

​ 实际使用时,80% 的时间只会用到这几个命令。按顺序来看。

3.1 初始化仓库

git init

​ 在当前目录创建一个 git 仓库。只需要执行一次。

3.2 查看状态

git status

​ 这是最常用的命令,随时可以执行,告诉你当前有哪些文件改了、哪些还没提交。养成习惯,操作前先 git status 看一眼。

​ 输出大概长这样:

Changes not staged for commit:
  modified:   app.py

Untracked files:
  requirements.txt
  • modified:已有的文件被改了,但还没告诉 git
  • Untracked:新文件,git 还不知道它的存在

3.3 暂存:git add

git add app.py          # 暂存单个文件
git add .               # 暂存当前目录所有改动

​ git add 的作用不是"保存",而是选择哪些改动要放进下一次提交,这一步叫"暂存"(staging)。

为什么需要这一步?

因为你可能同时改了多个文件,但只想提交其中部分。git add 让你精确控制提交内容。

3.4 提交:git commit

git commit -m "add login function"

​ 把暂存区的内容正式记录为一个 commit。-m 后面是提交说明,写清楚"做了什么",方便将来查看历史。

在这里插入图片描述

​ 工作区 → 暂存区 → 仓库,这三步是 git 最核心的工作流。add 是"选好要提交的",commit 才是"真正记录下来"。

3.5 查看历史:git log

git log --oneline

​ 列出所有历史 commit,--oneline 让每条记录只占一行,看起来更清晰:

a3f9b12 add login function
7c2e841 init project structure

​ 左边是 commit ID,右边是你写的提交说明。

3.6 推送到 GitHub:git push

​ 本地有了 commit,推到 GitHub:

git push origin main

​ origin 是远程仓库的别名(默认),main 是要推的分支。

​ 第一次推送需要先关联远程仓库:

git remote add origin https://github.com/你的用户名/仓库名.git
git push -u origin main   # -u 建立追踪关系,以后直接 git push 就行

3.7 拉取最新代码:git pull

​ 别人推了新代码,你想同步到本地:

git pull

​ git pull = git fetch(拉取远程改动)+ git merge(合并到当前分支)。多人协作时,改代码前先 git pull 是好习惯。

四、完整操作一遍

​ 把上面的命令串起来,走一遍完整流程。

4.1 在项目目录初始化仓库

git init
git branch -M main      # 把默认分支改名为 main

4.2 将改动暂存

git add .

4.3 查看当前状态

git status

4.4 提交

git commit -m "init: add project files"

4.5 关联Github仓库(只需一次)

git remote add origin https://github.com/你的用户名/仓库名.git

4.6 推送

git push origin main

​ 之后每次改完代码,重复第 2-4 步,再 git push 同步到 GitHub。

五、常见问题

5.1 git add . 和 git add 文件名 用哪个?

​ 一般用 git add . 更省事,但要注意别把不该提交的文件(比如 .env、本地配置)也加进去。可以创建 .gitignore 文件,把不想追踪的文件写进去,git 会自动忽略它们。

5.2 commit message 怎么写?

​ 格式约定:类型: 简短说明,比如:

  • feat: add user login

  • fix: correct password validation

  • init: project setup

    不需要写"修改了第 23 行",message 说的是为什么改或改了什么功能。

5.3 推送时要输入密码?

  • GitHub 不再支持密码认证
  • 用 Personal Access Token(PAT)或 SSH key 替代
  • 推荐配置 SSH,一劳永逸

六、总结

​ 你现在掌握了 git 的核心工作流:init → add → commit → push,以及随时查看状态的 status 和 log。

​ 这套流程够你完成大部分独立项目的版本管理。下一个要理解的是分支,当你需要和别人协作,或者想在不影响主线的情况下尝试新功能时,分支是核心工具。

Git工作流提效三法则:提交分级、stash索引与代码因果追踪 Git 不仅是版本控制工具,更是支撑多人协作与可追溯开发的核心基础设施。其底层原理围绕对象模型、快照机制与分布式共识展开,技术价值在于降低协作熵增、提升变更可审计性与故障根因定位效率。典型应用场景包括 CI/CD 流水线触发决策、紧急 hotfix 上下文隔离、以及配置项/常量演化的跨提交追溯。本文聚焦 commit 意图分级、stash 可检索快照、git log -S 因果链分析三大原生 Git 实践,结合 pre-commit 钩子、stash -m 元数据、pickaxe 语义搜索等能力,将 Git 阅读详情

相关推荐

git——01拉取和代码更新

获取 Git 仓库 通常有两种获取 Git 项目仓库的方式: 将尚未进行版本控制的本地目录转换为 Git 仓库; 从其它服务器克隆一个已存在的 Git 仓库。 两种方式都会在你的本地机器上得到一个工作就绪的 Git 仓库。 在已存在目录中初始化仓库 如果你有一个尚未进行版本控制的项目目录,想要用 Git 来控制它,那么首先需要进入该项目目录中。 如果你还没这样做过,那么不同系统上的做法有些不同: 在 Linux 上: $ cd /home/user/my_proje..

zangba9624的博客 1022

Git:本地分支和远程分支建立追踪关系的三种方式

建立追踪关系的三种方式: 手动建立追踪关系: $ git branch --set-upstream-to=<远程主机名>/<远程分支名> <本地分支名> push时建立追踪关系 $ git push -u <远程主机名> <本地分支名> 加上-u参数,这样push时,本地指定分支就和远程主机的同名分支建立追踪关系...

Samven_7的博客 2万+

在Matlab中开发AutoSAR模型的流程(自下而上)

前面介绍了AutoSAR软件组件开发的两种方式,其中自下向上的方式,是从模型出发,流程如下。

小胡同学的工程师学习之路 5364

git设置本地分支追踪远程分支

git远程仓库新建分支,本地分支追踪新建的远程分支

weixin_44360449的博客 6992

VCS和UVM常用编译选项

VCS编译选项 -full64 在64bit模式下编译、仿真,用于64位操作系统 -j8 指定编译器可以并行编译的进程数为8 -timescale=1ns/1ps 指定仿真时间和精度 +libext+.v+.V+.sv+.svh 识别.v、.sv、.svh等多种格式文件 -sverilog 支持system verilog 编译 -f xxx.lisf 指定包含所有设计文件列表的文件名 -top test 设置顶层模块为test。(指包含.

qq_40571921的博客 9931

5分钟搞定!用ZLMediaKit+GB28181搭建低成本外网视频监控(含避坑指南)

本文详细介绍了如何利用开源ZLMediaKit流媒体服务器与国标GB28181协议,快速搭建低成本、可外网访问的企业级视频监控系统。文章提供了从服务端部署、设备配置到外网访问优化的完整实战指南,并重点分享了网络配置、性能调优及常见问题的避坑方案,帮助用户实现高清视频流的稳定推送与多格式播放。

bush的博客 332

【随笔】Git 高级篇 -- 远程跟踪分支 git checkout -b | branch -u(三十五)

大家好,又见面了,我是夜阑的狗🐶,本文是专栏【Git】专栏的第三十五篇文章;这是今天学习到Git 高级篇 – 远程跟踪分支 💖💖💖,开启新的征程,记录最美好的时刻🎉,每天进步一点点。【Git】, 此专栏是我是夜阑的狗对Git,Gitee等工具使用过程的总结,希望能够加深自己的印象,以及帮助到其他的小伙伴😉😉。如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。在前几节课程中有件事儿挺神奇的,Git 好像知道main与o/main是相关的。当然这些分支的名字是相似的,可能会让你觉得是依此将远

JMFive的博客 6388

Vscode+ROS/ROS2 开发调试基于ROS/ROS2应用环境配置

在ROS操作系统开发应用程序时,我们常常需要调试代码,验证程序的正确性。但是在用rosrun或者roslaunch启动节点后,若程序运行过程中发生错误而导致发生出错停止工作,这时候终端并不会输出具体的信息指出在何处发生了错误,具体错误的原因又是什么。往往仅仅是core dump 或者segmentation fault 等等一类的模糊提示。

Chasinglight的博客 5800

Git之本地分支和远程分支建立追踪关系的几种方式

Git之本地分支和远程分支建立追踪关系的几种方式

专注自动化、性能测试、测试架构学习交流 2026

【YOLO11改进 - C3k2融合】C3k2融合DWRSeg二次创新C3k2_DWR:扩张式残差分割网络,提高特征提取效率和多尺度信息获取能力,助力小目标检测

【YOLO11改进 - C3k2融合】C3k2DWRSeg二次创新C3k2_DWR:扩张式残差分割网络,提高特征提取效率和多尺度信息获取能力,助力小目标检测

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 1054

HLA分型

HLA分型 一、根据WES的tumor数据进行数据分型 选用hlahd 软件安装及使用 [root@18605fd8771e ~]# wget https://jaist.dl.sourceforge.net/project/bowtie-bio/bowtie2/2.4.1/bowtie2-2.4.1-linux-x86_64.zip [root@18605fd8771e ~]# unzip bowtie2-2.4.1-linux-x86_64.zip && mv bowtie2-2.4.1

qq_23435961的博客 2487

Git学习基础-day01

Git是一个开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。Git易于学习,占地面积小,性能极快。它具有廉价的本地库,方便的暂存区域和多个工作流程分支等特性。提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了Git 概述、何为版本控制,为啥子需要版本控制、版本控制工具(了解)、Git和代码托管中心,新手学习多多指教~`。

bit_Simona的博客 745

(2-2-2)位置控制算法:常用的位置控制算法(2)

例如下面是一个使用滑模控制算法实现机器人位置控制的例子,在该例子中,假设机器人在一维空间中移动,目标是使机器人的位置迅速、鲁棒地达到设定的目标位置。自适应控制算法通过实时地调整控制器参数,可以适应系统的变化,从而提高系统的鲁棒性和性能。模型预测控制(Model Predictive Control,MPC)是一种先进的控制策略,通常应用于动态系统,以实现对系统状态的优化控制。(6)迭代优化:随着时间推移,MPC迭代执行上述步骤,持续优化控制输入,以适应系统动态和外部扰动,实现对系统状态的稳健控制。

码农三叔 1607

git rm -r --cached_git 撤销对文件的追踪

撤销暂存区(index)区的track当我们新增加文件时,使用git status会打印出:Untracked files: (use "git add <file>..." to include in what will be committed) hello.txt ​ nothing added to commit but untracked files pr...

weixin_39814454的博客 1130

第150篇 激光雷达点云分割——地面分离、聚类分析和物体提取

本文介绍了点云分割的三种经典几何方法:RANSAC地面分离、欧式聚类和区域生长。RANSAC通过随机采样拟合平面实现地面分割,欧式聚类基于空间距离进行物体分割,区域生长则结合法线信息提升分割精度。文章对比了各种方法的优缺点,提供了参数选择建议,并指出实际项目中常组合使用这些方法。最后给出了面试应答技巧,强调几何方法速度快、可解释性强等优势,适合大多数机器人项目的实时需求。

郑伟强dev的专栏 192

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Git 集成实战完全指南(五):Git Blame 与历史追踪

/ TODO: 这里为什么要用 30 而不是 60?—— 张三, 2025-03-15 // HACK: 别动这行,动了就挂 —— 李四, 2025-01-20 // WTF: 谁写的这个?—— 王五, 2026-06-01这些注释背后都是故事。用 Git Blame 和历史追踪,我们可以还原这些故事。

驽马不舍 264

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Git的安装、配置、使用01【Git Bash Here命令行操作】

Git的安装、配置、使用02【Idea的支持使用】https://blog.youkuaiyun.com/qq_45037155/article/details/123446538 Git的安装、配置、使用02【Idea的支持使用】https://blog.youkuaiyun.com/qq_45037155/article/details/123446538 目录 一、版本控制工具 1. 什么是版本控制工具 2. 版本控制工具的作用 3. 目前市场常见的版本控制工具及分类 3.1 集中式版本控制工具 3....

书启鸿蒙知秋枫 8925

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

git进阶 | 01 - git基础操作进阶

引言 上次写git入门教程还是2019年(Git & Github学习总结),三年期间使用最多的命令不过三条: git add -A git commit -m "" git push origin master 显然,这只是把git当作一个文件系统照相机来用,每一次git commit都是为了备份,而不是管理。 在经历了一次多人协同的项目之后,我觉得非常有必要沉淀一些东西出来,于是就诞生了写git进阶教程的想法,希望有动力写下去吧~ 在工作中经常手足无措的场景如下。 “jack,我改完bug了要

Mculover666的博客(嵌入式) 1756

SD01_使用git完成代码管理

进入你新建的某个目录下,,点击下方的Git Clone,复制在gitee粘贴的链接点击OK,克隆成功。

技术博客 1008

怎样用 Git 分析代码提交历史与变更?

上周有个同事在晨会上突然问:"我们上周改的登录模块到底改过多少次啊?"整个会议室突然安静了。其实用Git查看提交记录就像翻看老相册,只不过这些"照片"记录着每次代码变更的痕迹。注意看每条提交的提交信息,这就像日记本里的文字记录。如果发现某次提交信息特别模糊,比如"优化代码",这时候就要结合后面的提交记录来推测具体做了什么。

2501_92585248的博客 1364

01_git的简单使用

本文介绍了Git团队协作中的常用操作指南,包括用户配置、SSH密钥生成、分支管理、代码提交和冲突解决等核心功能。主要内容有:如何配置本地和全局用户信息;生成并部署SSH密钥;分支的创建、查看、切换和追踪远程分支;代码修改的暂存、提交和推送流程;使用cherry-pick选择性合并提交;以及推送失败时的解决方案。这些命令涵盖了Git团队协作中的日常工作场景,包括git config、ssh-keygen、git branch、git checkout、git stash、git commit、git push

qq_40681630的博客 528

Git 实用技巧1——从 Git 中停止追踪「被追踪的文件」 | 修改远程仓库地址

中的本地配置文件添加到 git 中,会导致每次编译时,IDE 会提示 git 修改。为了减少/消除提示,需要将该文件取消追踪,但不能将其从本地删除,以取消对。修改远程仓库地址可能会影响团队协作,需要谨慎操作。

零一魔法 521

3步掌握Git历史可视化:让代码时光机触手可及

想象一下,当你需要追溯一个关键函数是如何演变的,或者想了解某行代码是谁在什么时候修改的,传统的Git命令行操作就像在迷宫中摸索。Git History项目为你打造了一台**代码时光机**,让你在5分钟内就能直观地浏览任何Git仓库的文件历史。这个开源工具将复杂的Git操作转化为简洁的可视化界面,无论你是Git新手还是经验丰富的开发者,都能快速上手。 ## 为什么选择Git历史可视化工具? 传统

gitblog_00326的博客 1123

揭秘Git代码溯源难题:如何用GitLens实现精准追踪与高效协作

轻松解决代码溯源难题,掌握VSCode的GitLens插件高级用法,实现提交记录追溯、变更行追踪与团队协作优化。适用于代码审查、bug排查等场景,提升开发效率。功能强大,操作便捷,值得收藏。

CodeNexus的博客 632

GIT基础01 基础命令与分支

GIT基础命令以及原理

qiuqiushuibx的博客 702

Git基础

暂存区是一个中间区域,它用于暂时存储你希望提交到本地仓库的修改。你可以通过。

weixin_43414019的博客 903
上一篇: 【CI/CD】02_一次 git push 后发生了什么?CI 是怎么工作的
下一篇: 【Git 报错处理】`remote origin already exists` 是什么意思?
未收敛
博客等级 码龄11年 3303粉丝 163原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未收敛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值