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

一 、Git GUI的各区域的显示

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

【Git基础】 工作区 暂存区 版本库详解_第1张图片【Git基础】 工作区 暂存区 版本库详解_第2张图片

二、Git bush下各区域简介

先描述下各区域,其中

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

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

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

【Git基础】 工作区 暂存区 版本库详解_第3张图片

 三、如何在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号,通过git log 获取,最上端为最新的一个commit,我们要操作的是是顶部上数的第二个位置。

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

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

  • 强行删除远端分支:

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

  •  使用git revert回退代码

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

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

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基础】 工作区 暂存区 版本库详解_第4张图片

你可能感兴趣的:(git,c语言)