【Git基础】 工作区 暂存区 版本库详解

本文详细介绍了Git中的工作区、暂存区与本地仓库的概念,并解释了如何使用Git命令在这些区域间切换。包括如何恢复文件、撤销添加到暂存区的操作、回退提交等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 、Git GUI的各区域的显示

在Git GUI中,工作区、暂存区、本地仓库以可视化形式显示,对新手十分友好,如下所示。

二、Git bush下各区域简介

先描述下各区域,其中

工作区记录了本地代码与上次提交的差异代码项,即git add 之前的代码。

暂存区记录了git add的但未git commit分支的代码。

本地仓库记录了git commit提交到本地分支的代码。

 三、如何在Git bash下中如何使用命令行进行各区域切换

1、我更改了a.c文件的代码,想把整个文件都恢复原状,需要一行一行改回来吗?

 不需要。可以使用git checkout a.c恢复。

2、我将代码git add将a.c到暂存区,想撤回咋办?

使用git reset a.c指令撤回。git reset格式如下所示。

git reset [--soft | --mixed | --hard] [HEAD]

--mixed为默认,将分支代码回退到工作区。

--soft,将分支代码回退到暂存区。

--hard,将分支代码直接删除。(慎用

[HEAD]个人理解为git中头指针的含义。

git reset a.c作用同 git reset [--mixed] HEAD

  • HEAD 表示当前版本(本地仓库中的Git版本)

  • HEAD^ 上一个版本

  • HEAD^^ 上上一个版本

  • HEAD^^^ 上上上一个版本

  • 以此类推

 以前自己一直搞不清楚soft、mixed、hard的关系,和工作区、暂存区、本地仓库一对应,关系就清晰多了。

3、git commit更新到本地分支,但想回退到暂存区或工作区,该怎么办?

同第二个问题,使用git reset HEAD^或者使用git reset <commit号>,<commit号>为上一个commit号,通过git log 获取,最上端为最新的一个commit,我们要操作的是是顶部上数的第二个位置。

4、已经git push到了远程仓库,如何回退?

两种方式,一种是将前一次提交的代码保留,并在此基础上生成新的提交;另一种是将前一次提交的直接删除。

  • 强行删除远端分支:

git log // 得到你需要回退一次提交的commit id
git reset --hard <commit_id>                // 强制回退
git push origin HEAD --force  // 强制提交一次,之前错误的提交就从远程仓库删除

  •  使用git revert回退代码

git revert即将前一次代码的提交保留,并在前一次commit的基础上生成新的代码。

git log  // 得到你需要回退一次提交的commit id
git revert <commit_id>  // 撤销指定的版本,撤销也会作为一次提交进行保留

git revert 和 git reset的区别:
- git revert是用一次新的commit来回滚之前的commit,此次提交之前的commit都会被保留
- git reset是回到某次提交,提交及之前的commit都会被保留,但是此commit id之后的修改都会被删除

  • 在原commit基础上追加变更(推荐使用)

git commit --amend

5 、我想将工作区的某个文件还原,可以怎么做?

若对全部文件还原,可以使用git checkout .

若只对某个文件进行还原,例如APP.h,可以使用git checkout APP.h

若要放弃工作区和缓冲区所有的修改,可以使用git checkout -f

6、git 文件的三种状态分别代表什么意思?

Changes not staged for commit:更改但未提交至暂存区。

Changes to be committed:更改且已提交至暂存区,即将commit。

Untracked files:未追踪的文件。

7、对于未追踪的文件要怎么处理

对于生成的.o、.obj等中间文件,可以直接git clean -fd 删除掉;对于新增的可用文件,可以git add,将其添加到暂存区;对于一些每次都会生成的一些.o的中间文件,可以直接在.gitignore目录下忽略掉。

### Git 暂存区的概念 暂存区(Index 或 Staging Area)是 Git 中一个重要但容易被忽视的部分。当执行 `git commit` 时,Git 实际上是从暂存区获取数据并将其作为新的提交记录保存下来[^2]。 在实际操作中,每次修改工作区内的文件后,这些更改并不会立即进入版本库,而是先放置于暂存区内等待确认。只有经过显式的 `git add` 命令将特定文件或变更加入到暂存区之后,才能通过后续的 `git commit` 提交至本地仓库。 ### 如何使用暂存区 #### 添加文件到暂存区 要向暂存区添加文件,可以使用如下命令: ```bash git add <file> ``` 这会把指定文件从工作区复制一份副本放入暂存区,并标记为待提交状态。如果想要一次性添加所有已跟踪以及未跟踪的新文件,则可以直接运行: ```bash git add . ``` #### 查看暂存区的状态 为了查看哪些文件已经被添加到了暂存区,可利用以下指令获得详细的差异对比信息: ```bash git status ``` 此命令不仅能够展示处于不同阶段(即已暂存/未暂存)下的改动情况,还会提示如何继续处理这些变化。 #### 移除暂存区中的文件 如果不小心将某些不需要提交的内容加入了暂存区,可以通过下面的方式撤销这一行为而不影响原始文件: ```bash git restore --staged <file> ``` 上述命令将会移除给定路径对应的条目,使其恢复到仅存在于工作区而不在暂存区里的状况。 #### 完成提交过程 一旦准备好了一组完整的更新项,就可以准备正式提交了。此时只需简单调用: ```bash git commit -m "描述性的消息" ``` 这样就会把当前暂存区里所有的变动打包成一个新的提交对象存储进项目的历史记录之中。 ### 图解说明 根据参考资料,Git 的整体架构由多个部分组成,其中包括工作区暂存区和本地仓库等组件。对于开发者而言,理解这三个核心概念之间的关系至关重要,因为这是掌握 Git 流程的基础[^4]。 ![Git 结构](https://example.com/git_structure.png)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱笑的七小沐

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

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

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

打赏作者

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

抵扣说明:

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

余额充值