每天一Git之简单理解工作区和暂存区

1. 工作区与暂存区命令初体验

1.1. 暂存区文件与文件夹管理

[root@number ~]# cd GitDir/git_learning/
[root@number git_learning]# ls
readme.md
[root@number git_learning]# pwd
/root/GitDir/git_learning
[root@number git_learning]# echo "Index File" >> index.html
[root@number git_learning]# mkdir images
[root@number git_learning]# ls
images  index.html  readme.md
[root@number git_learning]# git status
On branch master
Untracked files:(use "git add <file>..." to include in what will be committed)index.html
nothing added to commit but untracked files present (use "git add" to track)
[root@number git_learning]# ls
images  index.html  readme.md
[root@number git_learning]# cd images/
[root@number images]# git status
On branch master
Untracked files:(use "git add <file>..." to include in what will be committed)../index.html

操作解释:

  • 进入我们的工程项目的目录
  • 创建一个新的index文件
  • 创建一个新的目录
  • 查看一下目前工作区和暂存区的状态
  • 进入到images目录,查看一下目前工作区和暂存区的状态

这里我们经过一系列行云流水的操作,发现一个小问题,就是我们增加的index文件在查看工作区和暂存区状态时候,发现Untracked files只有index.html,但是images目录却没有。难道得去images指定git status才能看到差异?于是我们进入到images目录,再次执行git status,发现还是没有,为什么呢?我们这里先卖个关子,我们继续尝试下面的操作再解释。

[root@number git_learning]# cd images/
[root@number images]# ls
Nginx.jpg
[root@number images]# cd ..
[root@number git_learning]# ls
images  index.html  readme.md
[root@number git_learning]# git status
On branch master
Untracked files:(use "git add <file>..." to include in what will be committed)images/index.htmlnothing added to commit but untracked files present (use "git add" to track)

这里我们使用文件传输工具在images目录下上传了一个Nginx.jpg文件,然后我们在项目Git的目录执行了git status命令后,发现Untracked files多了个images目录,这里上面的问题也就可以合理的解释了,也就是说再Git看来,如果你是空的文件夹或者目录,对Git来说是不会纳入管理的,只有目录是非空的时候,才会纳入管理,毕竟空目录确实没有实际意义。

1.2. 从工作区到暂存区

将工作区的文件纳入到暂存区管理

[root@number git_learning]# git status
On branch master
Untracked files:(use "git add <file>..." to include in what will be committed)images/index.htmlnothing added to commit but untracked files present (use "git add" to track)
[root@number git_learning]# git add images/ index.html
[root@number git_learning]# git status
On branch master
Changes to be committed:(use "git restore --staged <file>..." to unstage)new file:   images/Nginx.jpgnew file:   index.html

1.3. Add到暂存区反悔了怎么办?

我们在做项目Coding的时候,难免之前写的东西不想要了,但是还没有commit到版本库中,仅仅存在了暂存区,那么我们如何操作?没关系很简单,使用git rm命令即可操作。

[root@number git_learning]# touch a.txt
[root@number git_learning]# git status
On branch master
Changes to be committed:(use "git restore --staged <file>..." to unstage)new file:   images/Nginx.jpgnew file:   index.htmlUntracked files:(use "git add <file>..." to include in what will be committed)a.txt
[root@number git_learning]# git add a.txt
[root@number git_learning]# git status
On branch master
Changes to be committed:(use "git restore --staged <file>..." to unstage)new file:   a.txtnew file:   images/Nginx.jpgnew file:   index.html
[root@number git_learning]# git rm a.txt
error: the following file has changes staged in the index:a.txt
(use --cached to keep the file, or -f to force removal)
[root@number git_learning]# git rm a.txt --cached
rm 'a.txt'
[root@number git_learning]# git status
On branch master
Changes to be committed:(use "git restore --staged <file>..." to unstage)new file:   images/Nginx.jpgnew file:   index.htmlUntracked files:(use "git add <file>..." to include in what will be committed)a.txt

操作解释:

  • 创建一个a.txt文件
  • 将a.txt文件add到暂存区
  • 将a.txt从暂存区剔除
  • 使用--cached或者-f参数强制删除(这里的删除是从暂存区删除而不是真正的删除文件哦)

1.4. 正式提交,生成版本库信息

提交其实很简单,上一篇文章中也是用过这个commit命令,下面我们通过提交和查看log来演示一下

[root@number git_learning]# git commit -m'Add index.html+imagesDir'
[master 365aa4e] Add index.html+imagesDir2 files changed, 1 insertion(+)create mode 100644 images/Nginx.jpgcreate mode 100644 index.html
[root@number git_learning]# git log
commit 365aa4eabc17a08a32cfdfb7d20215da5b3ff155 (HEAD -> master)
Author: zhangzhao <zhangzhao@goldwind.com.cn>
Date:   Mon Jul 20 14:37:55 2020 +0800Add index.html+imagesDircommit 053d5d4318aef8be530074efd7bda3e742f5ad84
Author: zhangzhao <zhangzhao@goldwind.com.cn>
Date:   Fri Jul 17 19:07:57 2020 +0800Add readme

2. Git区域的理解

2.1. 区域

我们在使用Git的时候一般有3个工作区的概念:Git 仓库、工作目录以及暂存区域。其中工作目录比较好理解,就是我们开发时修改文件的那些目录,Git 仓库就是我们项目目录下面的 .git目录中的内容,而暂存区域是保存已经被Git标记过,将要提交保存到Git数据库中的文件的地方。

Git 本地数据管理,大概可以分为三个区,工作区,暂存区和版本库。

  • 工作区(Working Directory) 其实就是我们自己本机上Git项目的工作目录,也就是我们保存项目文件的目录,这里就是我们的工作区,顾名思义就是我们工作的地区嘛,简单来讲就是工作区
  • 暂存区(Stage 或 Index) 数据暂时存放的区域,我们从工作区Add文件或者目录的区域就是暂存区
  • 版本库(commit History) 存放已经提交的数据,其实就是我们本地的版本库,我们push代码到GitLab或者GitHub的时候,就是把这个区的数据 push 到远程git仓库了。

我画了一张简单的图,来方便大家理解Git三个区域的关系,其中也拓展了远程仓库的内容

2.2. 文件操作

文件从我们创建到编辑完提交Git帮我们记录,一共要经历3种状态:已修改(modified)、 已暂存(staged)已提交(committed)

[root@number git_learning]# echo "modified index" >> index.html
[root@number git_learning]# git status
On branch master
Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified:   index.html
no changes added to commit (use "git add" and/or "git commit -a")
[root@number git_learning]# git add index.html
[root@number git_learning]# git status
On branch master
Changes to be committed:(use "git restore --staged <file>..." to unstage)modified:   index.html[root@number git_learning]# git commit -m'Modified index.html'
[master 7cf8e5a] Modified index.html1 file changed, 1 insertion(+)
[root@number git_learning]# git status
On branch master
nothing to commit, working tree clean

  • 刚刚开始时编辑文件,这个时候文件是处于 已修改(modified) 状态,文件是在工作目录
  • 修改完文件,我们执行git add,这个时候文件就变为 已暂存(staged)状态,文件信息进入暂存区域,内容被保存到Git数据库中
  • 然后我们执行git commit,文件就变为已提交(committed)状态,创建了一个提交记录保存到了Git 仓库

知识点补充:

git diff                工作区 vs 暂存区
git diff head           工作区 vs 版本库
git diff –cached        暂存区 vs 版本库

2.3. 三大分区的好处

我们可以通过 checkout/stash/reset 等命令,通过不同的参数搭配使用,可以在工作区,暂存区和版本库之间,轻松进行数据的来回切换。

修改了多个文件,在不放弃任何修改的情况下,其中一个文件不想提交,如何操作?- 没add操作: git add 想提交的文件- 已经add操作:git reset –soft 将文件从暂存区回滚到工作区,重新add
修改到一半的文件,突然间不需要或者放弃修改了,怎么恢复未修改前文件?- git checkout
代码写一半,被打断去做其他功能开发,未完成代码保存?- git stash 提交到缓存区
代码写一半,发现忘记切换分支了?- git stash & git checkout
代码需要回滚了?- git reset

命令解释及作用

git reset –soft commit_xxid   - 暂存区->工作区 将commit_xxid提交从暂存区回滚到工作区
git reset –mixed    commit_xxid 版本库->暂存区- 将commit_xxid提交从版本库回滚到暂存区
git reset –hard commit_xxid - 版本库->暂存区->工作区  三个区都清除commit_xxid提交

git pull 是到工作区还是暂存区_每天一Git之简单理解工作区和暂存区相关推荐

  1. git pull 是到工作区还是暂存区_我把git想简单了

    git 是开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理.我们平时可能经常使用它,但是你真的了解 git 吗?先抛几个问题 git add 发生了什么?git 有哪些暂存区 ...

  2. 02_创建Git仓库,克隆仓库,git add,git commit,git push,git pull,同行冲突,不同行冲突的结局方案,git mergetool的使用

    1 创建Git资源库,残酷目录信息 创建git资源库的命令: git init –bare 仓库名称 (其中-bare表示的意思是空的库的意思) 进入E:\software\repository\gi ...

  3. git pull不同步_git回退版本,再返回最新分支git pull失败的解决经验

    本文转载自[微信公众号:羽林君,ID:Conscience_Remains] 总述 一篇解决gti分支切换问题的文章,大家应该都有过这种情况,就是git最新的代码进行编译的时候,发现最新代码有bug, ...

  4. git提取和拉取区别_每天一Git之起步 - 关于版本控制

    每天一Git之起步 - 关于版本控制 本文章为git官方文档摘抄,请访问https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%85%B3%E4%B ...

  5. git 只commit不push 会有影响吗_规范化团队 git 提交信息

    规范化团队 git 提交信息 同一个工程项目,为了方便管理,git 的 commit 信息最好按照一定的格式规范,以便在需要的时候方便使用.什么是方便的时候,比如出现了一个线上 bug,所以需要回滚操 ...

  6. 闪存驱动器_在任何Windows计算机上从您的闪存驱动器运行便携式Chrome

    闪存驱动器 Would you like to run Google Chrome with your favorite extensions and settings on any computer ...

  7. java 银行存取款_使用JAVA编写一个简单的银行存取款程序

    package com.lw.thread; /* 银行账户类Account(不能透支), 包含账号id(10~16位数字),密码password(6位数字),户主姓名name,余额balence * ...

  8. git pull 与 git pull --rebase

    文章目录 前提知识 区别git pull 与 git pull --rebase 简单理解 git merge与git rebase git pull 和 git pull --rebase 命令都是 ...

  9. You may want to first integrate the remote changes (e.g., ‘git pull ...‘) before pushing again多种解决方法

    文章目录 1. 复现错误 2. 分析错误 3. 解决错误 4. 解决该错误的其他方法 1. 复现错误 今天使用git status查看文件状态,发现有一个文件未提交,如下代码所示: D:\projec ...

最新文章

  1. 【剑指offer-Java版】24二叉搜索树后序遍历序列
  2. HDU 5552 Bus Routes(2015合肥现场赛A,计数,分治NTT)
  3. Linux数据报文接收发送总结6
  4. yum 简介及其常用命令
  5. 前端学习(1999)vue之电商管理系统电商系统之分析表单的数据
  6. python 获取 字典中的指定键_python中字典方法的详细教程
  7. C语言 文件读写 ferror 函数 - C语言零基础入门教程
  8. 2020广西师范大学计算机学院调剂,2020广西师范大学计算机视觉与应用接收考研调剂...
  9. Web表单美化CSS框架Topcoat
  10. OpenSSL:openssl-xxx.tar.gz
  11. Altium AD20的四层板叠层管理、平面层20H内缩
  12. 快速搭建LAMP环境
  13. 腾讯位置服务开发应用-使用教程,案例分享,知识总结
  14. Hadoop原理讲解(面试题)
  15. 常见花材的固定的方法有哪些_插花方法之巧妙固定花材
  16. SEED LABS初入
  17. 操作系统习题自用(三)
  18. Hack The Box-meow
  19. U3D_API_解析
  20. linux开启rdp服务,让windows电脑mstsc远程,linux rdesktop远程windows机器

热门文章

  1. 5分钟实现动态切换,原来迁徙图还可以这么玩!
  2. 方便食品直接上菜 自嗨锅和西贝哪来的勇气?
  3. c语言 生成大素数,C语言实现寻找大素数
  4. visual studio 调试时提示 已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。
  5. python如何读取配置文件获取url以及hhead_python爬虫小工具:(模块:copyhreaders,直接复制头文件,无须挨个添加双引号)...
  6. 攻防世界(pwn) level3
  7. python元类简述
  8. Python:数字的格式化输出
  9. python 文件不存在时才能写入,读写模式xt
  10. Python D6 if分支结构