Git 工作区、暂存区、仓库、远端同步完全指南:从 restore、reset 到 fetch、pull 的正确使用姿势

git与github使用教程 git与github使用教程什么是git/github如何使用github如何使用gitclone&init 什么是git/github 参考链接:百度百科-github 百度百科-git 简言之,github是一个版本管理工具,区别于svn,github是分布式管理,即不需要所谓的服务器作为上传下载的中心枢纽(svn服务器宕机的话所有人都没法工作,但github不存在这样的事情)。git我理解的不深,可以认为这就是个本地工具,可以链接github、gitlab等等的远端仓库。 如何使用g 阅读详情

一、为什么需要理解 Git 状态?

很多开发人员日常使用 Git:

git add .
git commit
git pull

但是遇到问题:

  • 修改代码想撤销;

  • add 后想取消;

  • commit 提错想回滚;

  • 分支乱了想恢复;

  • 本地和远端不一致;

经常不知道该用:

git checkout .

还是:

git reset --hard

还是:

git fetch

还是:

git pull

原因是:

Git 实际管理的是多个状态区域。


二、理解 Git 四个核心区域

Git 可以理解为:

                git commit

暂存区 -----------------> 本地仓库
(Index)                  (Repository)

   ^
   |
git add

   ^
   |
工作区
(Working Tree)


本地仓库

   |
   |
git fetch

   v

远程跟踪分支
(origin/master)

   |
   |
merge/rebase

   v

本地分支
(master)

1. 工作区 Working Tree

就是你正在编辑的代码。

例如:

chrome/browser/foo.cc

修改:

xxx();

此时:

git status

看到:

modified: foo.cc

代码只存在工作区。


2. 暂存区 Index

执行:

git add foo.cc

代码进入暂存区。

表示:

下一次 commit 我要提交这个版本。


3. 本地仓库 Repository

执行:

git commit -m "fix xxx"

生成 commit。

例如:

A---B---C

4. 远程跟踪分支 origin/master

执行:

git fetch

Git 更新:

origin/master

它代表:

Git 当前知道的远端状态。


三、git status:查看当前状态

所有操作前:

先:

git status

例如:

On branch master

Changes not staged:

 modified:
   foo.cc

表示:

工作区修改。


如果:

Changes to be committed:

 modified:
   foo.cc

表示:

已经 git add。


如果:

nothing to commit

表示:

当前干净。


四、git diff:查看修改内容

查看工作区修改

git diff

例如:

+ new code
- old code

查看暂存区修改

git diff --cached

查看:

git add

后的内容。


五、git add:把修改放入暂存区

例如:

git add foo.cc

或者:

git add .

含义:

工作区

   |
   |
   v

暂存区

注意:

add 不会提交。


六、git restore:撤销文件修改

新版 Git 推荐:

替代:

git checkout .

1. 恢复工作区

例如:

修改:

foo.cc

执行:

git restore foo.cc

效果:

工作区恢复到暂存区状态

全部恢复:

git restore .

七、git checkout .:旧版恢复方式

以前常用:

git checkout .

作用:

恢复工作区。

例如:

commit:

A---B---C


修改:

foo.cc

执行:

git checkout .

恢复:

A---B---C

但是:

它不能删除 commit。

例如:

A---B---C---D

D 已经提交。

执行:

git checkout .

没有效果。


八、git reset:移动 HEAD 和恢复状态

reset 是 Git 最重要命令。

形式:

git reset [模式] [目标]

三个模式:

soft
mixed
hard

九、git reset --soft

用途:

撤销 commit,但是保留修改。

例如:

A---B---C
        ^
      错误commit

执行:

git reset --soft HEAD~1

结果:

A---B

但是:

修改仍然在暂存区。

适合:

  • commit message 写错;

  • 想重新提交。


十、git reset --mixed(默认)

例如:

git reset HEAD~1

等价:

git reset --mixed HEAD~1

效果:

撤销 commit。

但是:

代码回到工作区。

结果:

commit:

A---B


working tree:

修改存在

适合:

想重新 add。


十一、git reset --hard

最强恢复。

执行:

git reset --hard

会恢复:

HEAD
+
Index
+
Working Tree

全部清空。

例如:

A---B---C

修改:

foo.cc

执行:

git reset --hard

恢复:

A---B---C

删除最后一次 commit

git reset --hard HEAD~1

例如:

A---B---C---D

变:

A---B---C

D 消失。


十二、git stash:临时保存修改

开发中经常:

正在改代码:

feature A

突然需要切分支。

可以:

git stash

保存。

恢复:

git stash pop

查看:

git stash list

十三、git clean:删除未跟踪文件

例如:

编译产生:

out/
tmp/
xxx.log

Git 不管理。

查看:

git clean -n

预览。

删除:

git clean -f

删除未跟踪文件。


十四、git branch:备份分支

危险操作前:

推荐:

git branch backup_before_reset

例如:

当前:

master

A---B---C---D

创建:

backup_before_reset

A---B---C---D


master

A---B---C---D

之后:

git reset --hard HEAD~1

即使后悔:

还有备份。


十五、git reflog:找回误删 commit

很多人以为:

git reset --hard

之后 commit 永久消失。

实际上:

Git 保存 HEAD 移动历史。

查看:

git reflog

例如:

HEAD@{0}: reset
HEAD@{1}: commit D

恢复:

git reset --hard HEAD@{1}

这是 Git 的后悔药。


十六、git fetch:只同步远端信息

这是很多人最容易误解的命令。

执行:

git fetch origin

不会:

  • 修改代码;

  • 合并分支;

  • 改 HEAD。

只更新:

origin/master

例如:

远端:

A---B---C---D

本地:

A---B---C

fetch 后:

origin/master:

A---B---C---D


master:

A---B---C

十七、git merge:合并代码

例如:

master:

A---B


feature:

A---B---C

切回 master:

git merge feature

结果:

A---B---M
       \
        C

产生 merge commit。


十八、git rebase:重新整理历史

例如:

master:

A---B---C


feature:

A---B---D

rebase:

git rebase master

变:

A---B---C---D'

历史更线性。


十九、git pull:fetch + merge/rebase

默认:

git pull

等价:

git fetch

+

git merge

如果配置:

git pull --rebase

则:

fetch

+

rebase

二十、如何让本地完全和远端一致?

这是开发中最常见场景。

例如:

本地:

A---B---C---D

远端:

A---B---C---E

目标:

丢弃 D。

正确:

第一步

git fetch origin

得到:

origin/master

A---B---C---E

第二步

git reset --hard origin/master

结果:

master:

A---B---C---E


origin/master:

A---B---C---E

完全一致。


二十一、Chromium 大仓库实际使用建议

Chromium:

src/
chrome/
content/
third_party/

提交和回滚频繁。

场景1:刚改几个 cpp,发现错了

使用:

git restore .

场景2:已经 git add

使用:

git reset

取消 add。

如果全部不要:

git reset --hard

场景3:实验 commit 错了

先:

git branch backup_bad_commit

然后:

git reset --hard HEAD~1

场景4:分支完全乱掉

例如:

zero_132

A---B---C---D


origin/zero_132

A---B---C

执行:

git fetch origin

git reset --hard origin/zero_132

二十二、Git 常用恢复命令速查表

目的命令
查看状态git status
查看修改git diff
加入暂存区git add
提交git commit
撤销文件修改git restore .
旧版撤销git checkout .
取消 addgit reset
撤销commit保留代码git reset --soft HEAD~1
撤销commit代码不要git reset --hard HEAD~1
临时保存修改git stash
删除未跟踪文件git clean -f
同步远端状态git fetch
拉取并合并git pull
合并分支git merge
整理历史git rebase
查看历史移动git reflog
完全同步远端git fetch + git reset --hard origin/xxx

总结

Git 命令不要死记,要理解它操作哪个区域:

git restore
        ↓
恢复文件


git add
        ↓
工作区 → 暂存区


git commit
        ↓
暂存区 → 本地仓库


git fetch
        ↓
远端 → origin分支


git merge/rebase
        ↓
origin分支 → 本地分支


git reset
        ↓
移动HEAD,调整状态

最终记住:

  • restore 管文件

  • add 管暂存

  • commit 管历史

  • fetch 管远端状态

  • pull 管同步合并

  • reset 管回滚

  • reflog 管后悔

掌握这些命令,基本可以解决日常开发(包括 Chromium 大型项目开发)中绝大多数 Git 恢复、回滚、同步问题。

Git如何检出远程分支并创建可编辑本地分支 在分布式版本控制系统中,远程分支本质上是远程仓库的独立引用,而本地无法直接操作它;Git 通过远程跟踪分支(如 origin/main)缓存其最新提交哈希,实现状态同步。理解本地分支、远程分支与远程跟踪分支三者的本质区别,是掌握协作开发的基础。技术价值在于保障多人并行修改的安全性与可追溯性,避免误提交或状态混乱。典型应用场景包括新成员拉取功能分支、日常对接同事开发中的 feature 分支、CI/CD 流水线触发前的代码准备等。本文聚焦‘git switch -c’与‘git checkout -b’两种标 阅读详情

相关推荐

实例讲解MOS管电源开关电路的软启动

1、控制电源开关的输入信号 Control 为低电平或高阻时,三极管Q2的基极被拉低到地,为低电平,Q2不导通,进而MOS管Q1的Vgs = 0,MOS管Q1不导通,+5V_OUT 无输出。此时将 Control 设为低电平,三极管Q2关闭,电容C1与G极相连端通过电阻R2放电,电压逐渐上升到5V,起到软关闭的效果。不过从作者的描述来看,只是电路参数有区别,能通过的电流、能承受的耐压等不一样,但是软启动的原理是一样的。从公式可以看出,当电容容量越大,电压越高,时间越短,电流就会越大,从而形成浪涌电流。

U_YAO的博客 2万+

【git】强制覆盖本地更改:如何安全地从远端拉取最新代码

本文详细讲解了在Git协作中,当本地修改与远端更新冲突时,如何安全、彻底地强制覆盖本地更改并与远端仓库同步。核心方法是使用 `git fetch` 结合 `git reset --hard origin/branch` 命令,并强调了操作前的状态检查、备份流程及潜在风险,帮助开发者高效处理紧急同步、环境重置等常见场景。

nft7creator的博客 634

底层软件测试规范,QA评审底层测试

本文首发于【林子的空间】“林子,咱们上次讨论的高效Desk check清单,用起来还挺好的,最近我们组每次Desk check变得顺利多了,Dev也是越来越熟练。”玥玥跟我说。“真好!我们组感觉也是这样!”“不过,我听小慧说他们组有人对QA review UT提出了一些concern(质疑),觉得QA review的价值不大,基本都是Dev给讲一遍,QA也提不出来什么反馈...”玥玥补充说道。“哦...

weixin_42144707的博客 1186

Git 命令

git help command git --version 查看git版本 git init 初始化本地仓库,会在当前目录下创建一个.git的目录 git config user.name "name" 项目级别的签名设置,放在工作...

EmbeddedCoder 的优快云博客 7341

功率开关管驱动串扰(Crosstalk):深度解析与优化方案

介绍了功率开关器件驱动串扰产生机理,并整理了常见的工程应用优化措施

qq_38326420的博客 553

自抗扰控制(ADRC)理论与工程实践:8.2 模糊ADRC、神经网络ADRC等智能融合变体

智能融合ADRC变体概述 自抗扰控制(ADRC)与智能控制方法(如模糊逻辑、神经网络)的融合,旨在突破传统ADRC在非线性、时变系统中的应用局限。智能融合ADRC主要通过以下方式实现性能提升: 模糊ADRC 参数自整定:利用模糊推理在线调节ADRC带宽参数,实现自适应控制。 非线性反馈:用模糊控制器替代线性PD,灵活设计非线性控制策略。 优势:融入专家经验,无需精确模型;局限:依赖规则库设计,稳定性分析困难。 神经网络ADRC 增强ESO:用神经网络学习扰动动态,提高估计精度。

技术工作者 223

git 教程、常用命令

git 教程、常用命令

freeking101的博客 6621

DaVinci配置DID之三:代码实现

本系列主要基于DaVinCi工具链来展开具体DID读写的配置以及最终实现。1,CDD准备2,工具链配置3,代码实现4,验证结果本文讲述流程3话不多说,走你~博主是AutoSar小白,如果哪里表达的有问题,还请大佬们指点指点哈。接下来,让我们在下章关于测试验证的博文再相会哈~

weixin_48498880的博客 5354

git用法总结

当前工作区有修改,但是需要切换到其它分支做事情,可以用git栈先存起来,否则checkout时会丢失非暂存区内的内容,等切换回来后再拿出来,git栈是全局的。功能上来看都是进行分支的合并,merge会保留原来的分支结构并产生一个新的提交记录,rebase是进行变基,把一个分支的提交在处理冲突后移到另一个分支后面,HEAD 是一个对当前所在分支的符号引用 —— 也就是指向正在其基础上进行工作的提交记录,用。把暂存区的内容提交到本地仓库,然后清空暂存区用于下一次的提交。git的基本操作可以用下面的图来表示。

m0_56049283的博客 1245

使用abagen工具箱获取基于脑区的基因表达矩阵

脑区模板定义了您感兴趣的脑区的空间位置。abagen提供了一些预定义的脑区模板,您可以选择使用,也可以使用自定义的脑区模板。它提供了一种简便的方式来获取基于脑区的基因表达矩阵。abagen需要使用Allen脑图谱数据来获取基因表达矩阵。您可以使用abagen内置的下载功能来获取这些数据。这就是使用abagen工具箱获取基于脑区的基因表达矩阵的详细步骤。通过按照上述步骤操作,您可以轻松获取并使用Allen脑图谱数据中的基因表达信息。一旦您加载了脑区模板,您可以使用abagen来获取基于脑区的基因表达矩阵。

web_bug407的博客 1326

8.26华为OD机试真题 新系统 - 字符串回文判 (Java/Py/C/C++/Js/Go)

8.26华为OD机试真题 新系统 - 字符串回文判 (Java/Py/C/C++/Js/Go)

算法大师! 1229

C++ (week9):Git

git指令:用git指令上传代码到gitee和github远程仓库

Edward2022的博客 1597

全志F1C100S/F1C200S学习笔记(1)——基础简介及资料

资料: 荔枝派资料下载站 荔枝派github 荔枝派中文论坛 荔枝派DIY-github资料 荔枝派Nano 全流程指南 芒果派 坑网

丨晋丨 1万+

git中 git checkout -- file 与 git reset -- file 试验

本文验证 git checkout -- file 与 git reset -- file 命令的具体作用区域。 个人认为 git checkout -- file 是将暂存区的内容恢复到工作区;git reset -- file 是将仓库的内容恢复到暂存区 网上找个了图,觉得不错,展示下 上图中我有疑问,个人认为应该不是直接从仓库还原到了工作,而应该还是从暂时存区还原到了工作,只不过暂存区的dev.txt已经提交了,所以不显示,但文件仍然存在。 ...

zzwpublic的专栏 1438

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Git常见命令和操作

本地代码已经 clone 下来了,但远端仓库有别人提交了新的改动,所以你本地的代码不是最新的。这样,才能保证你本地的代码是基于最新版本进行修改,避免覆盖或冲突,然后再提交和推送。此时,修改已经保存在本地仓库,但远端仓库中的代码尚未更新。命令将修改的文件添加到暂存区,表示这些改动已准备好提交。命令将暂存区中的改动提交到本地仓库,即保存为一个新的提交记录。并将该分支的代码checkout到本地仓库工作区。命令,将本地分支的提交推送到远端仓库对应的分支。因此,在修改代码并提交之前,应该先使用。

m0_66047826的博客 351

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

git 常用的几剂后悔药

将 git add 的文件变成 git add 之前的状态。 git restore --staged <filename> [looking@master GitTest]$ vim b.txt [looking@master GitTest]$ git add b.txt [looking@master GitTest]$ git status On branch master Your branch is up to date with 'origin/master'. Chang

Looking的网页备忘录和个人知识库 1万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Git 工程指引(命令+问题)

Git 工程指引(命令+问题),包括指令区别,常见的报错问题,特殊场景的使用,如何撤销,高级指令的使用!

少年何妨梦摘星,敢挽桑弓射玉衡。 他时若遂凌云志,敢笑黄巢不丈夫。 1052

git:总结

本文整理了多个实用的Git操作技巧和常见问题解决方法,包括:显示commit修改文件名的命令、cherry-pick冲突处理、gerrit差异文件应用、VSCode合并工具注意事项、git配置查询、分支删除命令、版本描述查询、权限配置建议、detach状态风险、二分法查错、仓库清理(gc/prune)、代码重构影响、远程仓库URL查看、撤销文件修改、Git服务器搭建、代理设置等。还特别提醒Windows用户注意Git对文件名大小写的处理问题,建议避免在仓库中使用仅大小写区分的文件名。

mzhan017的博客 4826

Fork Git 可视化客户端 完整使用说明书

Fork 是轻量商用 Git 图形客户端,替代命令行执行 Git 操作;核心优势:清晰提交图谱、可视化交互式变基、原生支持 Git Worktree、友好冲突解决面板。重要概念区分本地Commit:仅保存在本机,必须 Push 才同步远端Worktree:同一仓库多个独立本地目录,可同时运行多个分支交互式变基 rebase -i:整理本地提交历史,禁止作用于已推送公共分支。

莉莉的博客 210

git语法基本语法

git基本语法

Leslie_hollow的博客 511

Git基本操作-命令行

在目录下创建.gitignore文件,在文件中定义不需要上传的。直接执行git pull,不用带参数,拉取+合并到本地。合并到本地的时候也会产生冲突,解决冲突的方式与之前相同。git fetch + git merge方法。安装过后首要任务就是设置用户名和邮箱。5.设置SSH登录(可选)3.为常用指令配置别名。后续继续拉取最新代码。

南阳刘子骥的博客 116

分布式版本控制工具 Git 的使用方式

本文介绍了Git作为分布式版本控制系统的核心功能,涵盖下载安装、配置管理(如用户信息、编辑器设置)、本地仓库操作。重点讲解了工作区、暂存区、版本区三者关系,以及git add、git commit、git status等关键命令的使用流程。同时推荐了规范的提交消息格式,并展示了版本日志查看与差异对比方法,帮助开发者高效实现代码版本管理与团队协作。

如果巅峰留不住,那就重走来时路! 2097

git版本管理入门、package与package-lock/yarn.lock

​Workspace:工作区Index:暂存区,当执行git add的命令后,工作区的文件就会被移入暂存区, stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中Repository:本地仓库,位于自己的电脑上,通过git commit提交暂存区的内容,会进入本地仓库。Remote:远程仓库,用来托管代码的服务器,远程仓库的内容能够被分布在多个地点的处于协作关系的本地仓库修改,本地仓库修改完代码后通过git push命令同步代码到远程仓库。

luemeon的博客 5613

Git检出远程分支:从原理到安全实操的完整指南

Git远程分支不是即插即用的代码副本,而是分布式协作中需显式同步的引用指针。其本质是`.git/refs/remotes/origin/`下的提交哈希快照,与本地`refs/heads/`分支解耦——这解释了为何`git checkout origin/xxx`会触发detached HEAD,也说明`git fetch`仅更新元数据而不改动工作区。掌握这一底层机制,才能安全创建可追踪分支、规避丢失提交、解决路径冲突,并支撑CI/CD流水线、PR验证、多环境隔离等工程实践。本文聚焦`git fetch`+`

weixin_30723433的博客 460

git教程,git是什么,如何使用?完整且详细实战流程已整理好。

Git使用全流程指南 Git是一款分布式版本控制系统,用于高效管理代码变更,支持多人协作开发。与SVN不同,Git在本地和服务器均保存完整仓库,安全性更高。 核心使用流程: 环境配置 安装Git后需设置全局用户名/邮箱:git config --global user.name "xxx" 生成SSH密钥:ssh-keygen -t rsa,公钥需配置到远程仓库(如GitHub/Gitee) 仓库操作 克隆远程仓库:git clone <仓库地址> 本地初始化仓库:git i

程序的光,学无止尽的博客 494

git版本管理工具的常用命令汇总

本文系统介绍了Git版本控制的核心概念与操作流程。课程内容涵盖:1)基础操作(创建仓库、提交修改);2)修改管理(撤销、查看历史);3)分支操作(创建/切换/合并分支);4)冲突解决;5)远程协作(关联/推送/拉取);6)临时存储(stash)和标签管理;7)变基操作;8)完整开发流程示范。重点讲解了工作区、暂存区与仓库的关系,以及开发中常用的分支策略和团队协作规范,提供了从本地开发到远程协作的全套Git解决方案。

m0_57802932的博客 16
上一篇: Content API 深度解析:Chromium 浏览器内核的契约边界
下一篇: AI重塑软件工程:程序员正在从编码者进化为创造者
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

ปรัชญา แค้วคำมูล

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

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

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

打赏作者

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

抵扣说明:

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

余额充值