git pull 是到工作区还是暂存区_每天一Git之简单理解工作区和暂存区
每天一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之简单理解工作区和暂存区相关推荐
- git pull 是到工作区还是暂存区_我把git想简单了
git 是开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理.我们平时可能经常使用它,但是你真的了解 git 吗?先抛几个问题 git add 发生了什么?git 有哪些暂存区 ...
- 02_创建Git仓库,克隆仓库,git add,git commit,git push,git pull,同行冲突,不同行冲突的结局方案,git mergetool的使用
1 创建Git资源库,残酷目录信息 创建git资源库的命令: git init –bare 仓库名称 (其中-bare表示的意思是空的库的意思) 进入E:\software\repository\gi ...
- git pull不同步_git回退版本,再返回最新分支git pull失败的解决经验
本文转载自[微信公众号:羽林君,ID:Conscience_Remains] 总述 一篇解决gti分支切换问题的文章,大家应该都有过这种情况,就是git最新的代码进行编译的时候,发现最新代码有bug, ...
- git提取和拉取区别_每天一Git之起步 - 关于版本控制
每天一Git之起步 - 关于版本控制 本文章为git官方文档摘抄,请访问https://git-scm.com/book/zh/v2/%E8%B5%B7%E6%AD%A5-%E5%85%B3%E4%B ...
- git 只commit不push 会有影响吗_规范化团队 git 提交信息
规范化团队 git 提交信息 同一个工程项目,为了方便管理,git 的 commit 信息最好按照一定的格式规范,以便在需要的时候方便使用.什么是方便的时候,比如出现了一个线上 bug,所以需要回滚操 ...
- 闪存驱动器_在任何Windows计算机上从您的闪存驱动器运行便携式Chrome
闪存驱动器 Would you like to run Google Chrome with your favorite extensions and settings on any computer ...
- java 银行存取款_使用JAVA编写一个简单的银行存取款程序
package com.lw.thread; /* 银行账户类Account(不能透支), 包含账号id(10~16位数字),密码password(6位数字),户主姓名name,余额balence * ...
- git pull 与 git pull --rebase
文章目录 前提知识 区别git pull 与 git pull --rebase 简单理解 git merge与git rebase git pull 和 git pull --rebase 命令都是 ...
- 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 ...
最新文章
- 【剑指offer-Java版】24二叉搜索树后序遍历序列
- HDU 5552 Bus Routes(2015合肥现场赛A,计数,分治NTT)
- Linux数据报文接收发送总结6
- yum 简介及其常用命令
- 前端学习(1999)vue之电商管理系统电商系统之分析表单的数据
- python 获取 字典中的指定键_python中字典方法的详细教程
- C语言 文件读写 ferror 函数 - C语言零基础入门教程
- 2020广西师范大学计算机学院调剂,2020广西师范大学计算机视觉与应用接收考研调剂...
- Web表单美化CSS框架Topcoat
- OpenSSL:openssl-xxx.tar.gz
- Altium AD20的四层板叠层管理、平面层20H内缩
- 快速搭建LAMP环境
- 腾讯位置服务开发应用-使用教程,案例分享,知识总结
- Hadoop原理讲解(面试题)
- 常见花材的固定的方法有哪些_插花方法之巧妙固定花材
- SEED LABS初入
- 操作系统习题自用(三)
- Hack The Box-meow
- U3D_API_解析
- linux开启rdp服务,让windows电脑mstsc远程,linux rdesktop远程windows机器
热门文章
- 5分钟实现动态切换,原来迁徙图还可以这么玩!
- 方便食品直接上菜 自嗨锅和西贝哪来的勇气?
- c语言 生成大素数,C语言实现寻找大素数
- visual studio 调试时提示 已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。
- python如何读取配置文件获取url以及hhead_python爬虫小工具:(模块:copyhreaders,直接复制头文件,无须挨个添加双引号)...
- 攻防世界(pwn) level3
- python元类简述
- Python:数字的格式化输出
- python 文件不存在时才能写入,读写模式xt
- Python D6 if分支结构