一、概念

1、四个工作区域

Git本地有四个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)、git仓库(Remote Directory)。文件在这四个区域之间的转换关系如下:

Workspace: 工作区,就是你平时存放项目代码的地方

Index / Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息

Repository: 仓库区(或版本库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本

 Remote: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

2、工作流程

git的工作流程一般是这样的:

1、在工作目录中添加、修改文件;

2、将需要进行版本管理的文件放入暂存区域;

3、将暂存区域的文件提交到git仓库。

因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)

3、文件的四种状态

版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。

GIT不关心文件两个版本之间的具体差别,而是关心文件的整体是否有改变,若文件被改变,在添加提交时就生成文件新版本的快照,而判断文件整体是否改变的方法就是用

SHA-1算法计算文件的校验和。

Untracked:   未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.

 Staged:    暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存,文件状态为Modified

 Unmodify:   文件已经入(commit)库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件

Modified:    文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过,返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改 下面的图很好的解释了这四种状态的转变:

新建文件--->Untracked

使用add命令将新建的文件加入到暂存区--->Staged

使用commit命令将暂存区的文件提交到本地仓库--->Unmodified

如果对Unmodified状态的文件进行修改---> modified

如果对Unmodified状态的文件进行remove操作--->Untracked

二、四个区域常用命令

1、新建代码库

# 在当前目录新建一个Git代码库git init
# 新建一个目录,将其初始化为Git代码库
git init [project-name]
# 下载一个项目和它的整个代码历史
git clone [url]

2、查看文件状态

#查看指定文件状态
git status [filename]
#查看所有文件状态
git status

3、工作区<-->暂存区

# 添加指定文件到暂存区
git add [file1] [file2] ...
# 添加指定目录到暂存区,包括子目录
git add [dir]
# 添加当前目录的所有文件到暂存区
git add .
#当我们需要删除暂存区或分支上的文件, 同时工作区也不需要这个文件了, 可以使用(⚠️)
git rm file_path
#当我们需要删除暂存区或分支上的文件, 但本地又需要使用, 这个时候直接push那边这个文件就没有,如果push之前重新add那么还是会有。
git rm --cached file_path
#直接加文件名   从暂存区将文件恢复到工作区,如果工作区已经有该文件,则会选择覆盖
#加了【分支名】 +文件名  则表示从分支名为所写的分支名中拉取文件 并覆盖工作区里的文件
git checkout

4、工作区<-->资源库(版本库)

#将暂存区-->资源库(版本库)
git commit -m '该次提交说明'
#如果出现:将不必要的文件commit 或者 上次提交觉得是错的  或者 不想改变暂存区内容,只是想调整提交的信息
#移除不必要的添加到暂存区的文件
git reset HEAD 文件名
#去掉上一次的提交(会直接变成add之前状态)
git reset HEAD^
#去掉上一次的提交(变成add之后,commit之前状态)
git reset --soft  HEAD^ 

5、远程操作

# 取回远程仓库的变化,并与本地分支合并
git pull
# 上传本地指定分支到远程仓库
git push

6、其它常用命令

# 显示当前的Git配置
git config --list
# 编辑Git配置文件
git config -e [--global]
#初次commit之前,需要配置用户邮箱及用户名,使用以下命令:
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
#调出Git的帮助文档
git --help
#查看某个具体命令的帮助文档
git +命令 --help
#查看git的版本
git --version

参考

一个小时学会Git

工作区、暂存区、版本库、远程仓库相关推荐

  1. 工作区 暂存区 版本库之间的关系

    2019独角兽企业重金招聘Python工程师标准>>> 转载于:https://my.oschina.net/langgege/blog/1796775

  2. git--基本知识点--1--工作区/暂存区/版本库

    基本概念 我们先来理解下 Git 工作区.暂存区和版本库概念: 工作区:就是你在电脑里能看到的目录. 暂存区:英文叫 stage 或 index.一般存放在 .git 目录下的index 文件(.gi ...

  3. 文件在IDEA中已进行Git的Commit操作,使其从暂存区提交到本地仓库,但是未Push到远程仓库,此时进行Pull操作出现代码冲突

    问题描述:文件在IDEA中已进行Git的Commit操作,使其从暂存区提交到本地仓库,但是未Push到远程仓库,此时进行Pull操作出现代码冲突 解决方法:出现上述情况时,我们要先将文件从本地仓库中拉 ...

  4. Git——三大分区【工作区 / 暂存区 / 版本区】

    前言:Git作为一个版本管理工具,最核心组成思想是它的三个分区:工作区.暂存区和工作区. 1. 工作区   Git的工作区也就是我们平时编辑代码的目录文件夹. 2. 暂存区   暂存区就是一个暂时放置 ...

  5. git--工作区、暂存区、本地仓库、远程仓库

    原文网址:git--工作区.暂存区.本地仓库.远程仓库_IT利刃出鞘的博客-CSDN博客 ​​​​​​​​​​​​​​简介         本文介绍git的各个区:工作区.暂存区.本地仓库.远程仓库. ...

  6. git pull 是到工作区还是暂存区_每天一Git之简单理解工作区和暂存区

    每天一Git之简单理解工作区和暂存区 1. 工作区与暂存区命令初体验 1.1. 暂存区文件与文件夹管理 [root@number ~]# cd GitDir/git_learning/ [root@n ...

  7. Git三大特色之Stage(暂存区)

    这是开篇 有人说,暂存区是 Git 最精彩的设计,同时也是最难理解的部分,两者我都感觉不太明显,但当我想写关于暂存区的理解后,发现的确不怎么好讲,这个玩意,有点只可意会的感觉,用 Git 用熟练了,很 ...

  8. git 的详细使用 操作暂存区

    git 大概流程: 1.配置 1.1 配置本机全局的用户名(username)和邮箱(useremail ) 配置 >>>> 查看 一般就是新安装git才需要配置一次 git ...

  9. git-工作区与暂存区

    工作区 我们初始化的仓库目录就是工作区 暂存区,工作区的理解 临时存放的文件地方 类似于迁移文件 属于一个过渡的状态 这个过程类似于django中的模型类的迁移过程 可以多次添加内容到暂存区 最后一次 ...

最新文章

  1. 实战解析:真实AI场景下,极小目标检测与精度提升 | 百度AI公开课
  2. 进阶学习(3.4) Builder Pattern 建造者模式
  3. I2C和SPI异同及使用注意
  4. ubuntu运行navicat没有反应的解决方法
  5. 深度学习入门:Day-11_CNN
  6. flutter列表无法滚动到底部_在闲鱼实习做Flutter是什么感受?
  7. react-native升级到0.63ios图片不展示
  8. Vmware 虚拟机安装教程
  9. tf.saved_model
  10. 51单片机Proteus仿真+Keil工程-实验5-单片机串行口中断实验
  11. matlab 一阶微分方程求解,一阶微分方程的matlab数值解法.doc
  12. python如何提取word文档某个段落所有内容(包括段落、表格、图片一并提取)
  13. 按键精灵移动端系列 - IOS(苹果版)安装1.3.8 deb 下载地址
  14. springAOP切面获取入参和出参
  15. 0x00000124蓝屏问题解决方法
  16. ApriTag2 检测方法
  17. 解锁万亿级市场,边缘计算不“边缘”
  18. python小游戏之外星人入侵之pygame实战应用(含源码下载)
  19. 关于电脑任务栏软件图标变成白色白纸的解决办法
  20. 矩阵论极简笔记(2):列空间、正交补、零空间、行空间

热门文章

  1. Spring Boot----SpringBoot整合 Dubbo 和 Zookeeper
  2. 简洁又快速地处理集合——Java8 Stream(下)
  3. bzoj 2905 背单词
  4. O-C相关-08-动态类型与静态类型
  5. 【iOS】Quartz2D图片剪切
  6. C++ Editbox换行问题
  7. Andoid 采用ListView三种显示数据列表
  8. [Leetcode][第733题][JAVA][图像渲染][BFS][DFS]
  9. [Leetcode][第546题][JAVA][移除盒子][递归][动态规划]
  10. [剑指offer][JAVA]面试题第[32-2]题[从上到下打印二叉树][BFS]