Git基础

简介: 本文介绍了Git的四大工作区域:工作区、暂存区、版本库和远程仓库,详解文件在各区域间的流转过程及四种状态(未跟踪、未修改、已修改、已暂存)。涵盖常用命令如init、add、commit、push、pull等,帮助理解Git版本控制的核心流程与操作要点。

【Git】(1)---工作区、暂存区、版本库、远程仓库
工作区、暂存区、版本库、远程仓库

一、概念
1、四个工作区域
Git本地有四个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)、git仓库(Remote Directory)。文件在这四个区域之间的转换关系如下:

Workspace: 工作区,就是你平时存放项目代码的地方

Index / Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息

Repository: 仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本

    Remote: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

2、工作流程
git的工作流程一般是这样的:

1、在工作目录中添加、修改文件;

2、将需要进行版本管理的文件放入暂存区域;

3、将暂存区域的文件提交到git仓库。

因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)

3、文件的四种状态
版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。

GIT不关心文件两个版本之间的具体差别,而是关心文件的整体是否有改变,若文件被改变,在添加提交时就生成文件新版本的快照,而判断文件整体是否改变的方法就是用

SHA-1算法计算文件的校验和。

Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.

Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified.

               如果使用git rm移出版本库, 则成为Untracked文件

Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过,

            返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改

Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存,

           文件状态为Modified

下面的图很好的解释了这四种状态的转变:

新建文件--->Untracked

使用add命令将新建的文件加入到暂存区--->Staged

使用commit命令将暂存区的文件提交到本地仓库--->Unmodified

如果对Unmodified状态的文件进行修改---> modified

如果对Unmodified状态的文件进行remove操作--->Untracked

二、四个区域常用命令
1、新建代码库
复制代码

在当前目录新建一个Git代码库

git init

新建一个目录,将其初始化为Git代码库

git init [project-name]

下载一个项目和它的整个代码历史

git clone [url]
复制代码
2、查看文件状态

查看指定文件状态

git status [filename]

查看所有文件状态

git status
3、工作区<-->暂存区
复制代码

添加指定文件到暂存区

git add [file1] [file2] ...

添加指定目录到暂存区,包括子目录

git add [dir]

添加当前目录的所有文件到暂存区

git add .

当我们需要删除暂存区或分支上的文件, 同时工作区也不需要这个文件了, 可以使用(⚠️)

git rm file_path

当我们需要删除暂存区或分支上的文件, 但本地又需要使用, 这个时候直接push那边这个文件就没有,如果push之前重新add那么还是会有。

git rm --cached file_path

直接加文件名 从暂存区将文件恢复到工作区,如果工作区已经有该文件,则会选择覆盖

加了【分支名】 +文件名 则表示从分支名为所写的分支名中拉取文件 并覆盖工作区里的文件

git checkout
复制代码
4、工作区<-->资源库(版本库)
复制代码

将暂存区-->资源库(版本库)

git commit -m '该次提交说明'

如果出现:将不必要的文件commit 或者 上次提交觉得是错的 或者 不想改变暂存区内容,只是想调整提交的信息

移除不必要的添加到暂存区的文件

git reset HEAD 文件名

去掉上一次的提交(会直接变成add之前状态)

git reset HEAD^

去掉上一次的提交(变成add之后,commit之前状态)

git reset --soft HEAD^
复制代码
5、远程操作

取回远程仓库的变化,并与本地分支合并

git pull

上传本地指定分支到远程仓库

git push
6、其它常用命令
复制代码

显示当前的Git配置

git config --list

编辑Git配置文件

git config -e [--global]

初次commit之前,需要配置用户邮箱及用户名,使用以下命令:

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

调出Git的帮助文档

git --help

查看某个具体命令的帮助文档

git +命令 --help

查看git的版本

git --version
复制代码

参考
一个小时学会Git

相关文章
|
5月前
|
存储 人工智能 芯片
边缘 AI 芯片,为啥越来越“不像芯片”?聊聊这些年我看到的架构创新
边缘 AI 芯片,为啥越来越“不像芯片”?聊聊这些年我看到的架构创新
351 2
|
5月前
|
人工智能 自然语言处理 运维
2025 AI客服选型全景评测:从技术适配到价值赋能
伴随大语言模型与AI Agent技术的深度渗透,2025年智能客服行业完成了从“标准化问答工具”到“全场景智能服务中枢”的关键性跨越。这一转型不仅重构了客户服务的交互模式,更推动客服体系成为企业链接用户、优化运营的核心基础设施,其价值从单纯的成本节约延伸至业务增长赋能。
|
2月前
|
人工智能 API 网络安全
OpenClaw 零基础全解:定义 + 用途 + 完整部署教程 + 避坑指南(新手友好版)
OpenClaw是一款开源、本地优先的AI自动化代理引擎(MIT协议),以自然语言驱动,支持文件操作、浏览器自动化、多IM交互等真实任务执行。强调隐私可控、强执行、多入口接入、模型灵活适配与开源可扩展,是面向开发者与企业的自托管AI数字员工。
|
SQL 关系型数据库 MySQL
MySQL唯一约束(UNIQUE KEY)
MySQL唯一约束(UNIQUE KEY)
1232 0
|
2月前
|
安全 Ubuntu 开发工具
【Git】Git工具的正确使用指南(系统性总结)
本指南系统梳理Git核心概念(仓库、工作区、暂存区、提交、分支)与全流程操作,涵盖安装配置、本地开发、分支管理、远程协作(Fork+PR)、.gitignore配置及提交规范,强调安全操作与最佳实践,助开发者高效、规范使用Git。
|
9月前
|
JavaScript 前端开发 开发者
深入理解import type在模块引入中的作用
总结而言, 使用 `type import`, 是为了优化 TypeScript 项目, 它通过精简最终 JavaScript 输出并且使得开发者更容易理解和管理他们所写程序之间复杂且微妙关系网络, 进而提升整体效率与可维护性。
243 0
|
JavaScript
tsc : 无法将“tsc”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
tsc : 无法将“tsc”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
tsc : 无法将“tsc”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
|
人工智能 Java 开发者
豆包MarsCode “一键Apply”功能测评:编程效率革新利器
豆包MarsCode的“一键Apply”功能旨在提升开发者编程效率,通过AI自动生成和应用代码,简化重复操作、精准修复错误、助力新项目开发及快速生成注释。安装插件后,在VSCode中与AI对话生成代码并点击Apply按钮即可完成应用,过程流畅高效。适用于C++、Java、Python等多语言环境,极大节省开发时间,降低手动操作风险。无论是资深开发者还是新手,都能从中受益,显著提升编程体验。
1360 9
|
JavaScript 安全 前端开发
什么是同源策略
什么是同源策略
500 0
|
XML 存储 Java
SpringMVC常见组件之HandlerMapping分析
SpringMVC常见组件之HandlerMapping分析
538 0