[git]入门-工作区、暂存区、版本库
转载整理自:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013743256916071d599b3aed534aaab22a0db6c4e07fd0000
0、写在前面
其实,我们每次执行可以改变暂存区或分支的git命令时,只要这个命令操作的文件的内容的散列值还没有在.git/objects目录下作为一个文件的文件名,这个文件就会被添加到.git/objects下,文件名(确切地说散列值的前两个字符会作为一级文件夹名)就是那个散列值,而暂存区和分支里的不过是这个文件的指针而已。作为版本控制的用户,我们主要应关注工作区、暂存区、版本库的关系,.git/objects属于git的底层实现了。
1、工作区、暂存区、版本库
我们执行git init命令的那个目录就是我们的工作区。工作区有一个隐藏目录.git
,这个不算工作区,而是Git的版本库。Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master
,以及指向master
的一个指针叫HEAD
。
1.1、把文件从工作区添加到暂存区、版本库中
我们把文件往Git版本库里添加的时候,是可以分两步执行的:
- 第一步是用
git add
把文件添加进去,实际上就是把文件修改添加到暂存区; - 第二步是用
git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个master
分支,所以,现在,git commit
就是往master
分支上提交更改。你可以简单理解为,需要提交的文件修改都通过git add(可连续多次)放到暂存区,然后,一次性通过git commit提交暂存区的所有修改。
我们要注意:在提交以后,工作区、暂存区、版本库的内容都一样了(暂存区、版本库保存的其实是指针)。git提供了两条命令来比较工作区、暂存区和暂存区、版本库当前分支的差异的命令,分别是
- 查看工作区、暂存区文件差异: git diff
- 查看暂存区、版本库当前分支最新一次提交之间的差异: git diff --cached
提交以后我们可以分别执行一下这两个命令,你会发现:“在提交以后,工作区、暂存区、版本库的内容都一样了”。
1.2、从暂存区、版本库恢复文件到工作区
自然,每一个程序员都会犯错误。版本控制系统除了提供我们“版本管理”的功能,还应该可以在我们犯了错以后让我们很方便地回退到前一个版本(丢弃工作区的修改)。相比与其他版本控制系统,git还提供了暂存区功能,因此我们还可以回退到上一次修改而不用回退到上一个版本,提供了更大的自由度。
从暂存区恢复,或称“拿暂存区文件替换工作区文件”(譬如错误还在工作区)命令:
git checkout -- file
从当前分支的最新一次提交恢复,或称“拿版本库文件替换暂存区、工作区文件”(譬如错误已经add到了暂存区)命令:
git reset HEAD file
从当前分支的上上次的提交恢复(譬如错误已经被提交):
详见分支管理篇
1.2.1、git reset命令:
2、文件、文件夹改名:
在我们版本升级过程中,除了文件内容的修改之外,文件名和文件夹名有时候也需要改变。有很多git命令需要了解改名历史,譬如git diff。但git不是记录改名,而是探测改名,每次需要了解改名历史时(一般时-M[<n>]或--find-renames[=<n>]参数),git都会去探测改名,默认时50%相似度。
[git]入门-工作区、暂存区、版本库的更多相关文章
- 小丁带你走进git的世界二-工作区暂存区分支
小丁带你走进git的世界二-工作区暂存区分支 一.Git基本工作流程 1.初始化一个仓库 git init git clone git仓库分为两种情况: 第一种是在现有项目或目录下导入所有文件到 ...
- Git入门 时光穿梭鸡 版本回退 工作区 暂存区
分布式集中式 CVS及SVN都是集中式的版本控制系统 , 而Git是分布式版本控制系统 集中式版本控制系统,版本库是集中存放在中央服务器的, 而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得 ...
- 完整学习git三 查看暂存区目录树 git diff
1显示暂存区中的目录树 git ls-files git ls-tree git diff 魔法 1工作区与暂存区比较 git diff 2工作区与HEAD比较 git diff HEAD 3暂存区与 ...
- Git 基础 - 删除暂存区的文件
1 直接删除文件 这个文件会有两个操作:已暂存的修改.未暂存的删除 2 直接删除文件 + 记录删除操作 先在工作目录中删除文件,再使用git rm命令记录此次移除文件的操作(删除暂存区中该文件的修改快 ...
- Git(1):版本库+工作区+暂存区
参考博客:https://blog.csdn.net/qq_27825451/article/details/69396866
- git 撤回放到暂存区的文件
git reset HEAD filename 如:git reset HEAD test.txt 或者使用 git reset . 撤回所有文件(注意后面还有个.)
- Git-03-工作区和暂存区
工作区和暂存区的概念 工作区 工作区:就是电脑里能看到的目录,如现在学习的目录github 暂存区 版本库:工作区内有一个隐藏目录 .git,这个叫做版本库 git版本库中有一个重要的区叫做暂存区(i ...
- Git使用指南(2)——工作区,暂存区,版本库
1 工作区修改添加到暂存区 git add 2 暂存区提交到版本库 git commit 3 版本库更新到暂存区 git reset HEAD 4 删除暂存区文件 git rm --cached< ...
- 【Git】(1)---工作区、暂存区、版本库、远程仓库
工作区.暂存区.版本库.远程仓库 一.概念 1.四个工作区域 Git本地有四个工作区域:工作目录(Working Directory).暂存区(Stage/Index).资源库(Repository或 ...
随机推荐
- js添加的元素无法触发click事件
动态生成的元素,使用.on绑定事件,比如$(document).on("click",".divclick",function(){})
- 剑指offer 07:斐波那契数列
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0).(n<=39) 法一: public class Solution { publi ...
- flyway
flyway主要基于6种基本命令:migrate, clean, info, validate, baseline, repair flyway如何运作:https://flywaydb.org/ge ...
- heap_sort
(from wikipedia) 构建步骤: 建成一个大顶堆 第一个元素依次和最后一个元素交换,由于交换后新的堆顶元素可能违反大根堆的性质,因此需要对当前无序区(1,2,...,n-1)调整为新堆 不 ...
- Valotile关键字详解
在了解valotile关键字之前.我们先来了解其他相关概念. 1.1 java内存模型: 不同的平台,内存模型是不一样的,我们可以把内存模型理解为在特定操作协议下,对特定的内存或高速缓存进行读写访问 ...
- 如何查看卖家ID (Merchant ID) 亚马逊哪里找?
如何查看卖家ID (Merchant ID) 亚马逊哪里找? 如何查看卖家ID (Merchant ID) 亚马逊哪里找? 1. 找到想要获取ID的卖家,点击店铺名(跟卖的卖家会收在”Other Se ...
- session和cookie的简介
Session(时域)在计算机中,尤其是在网络应用中,称为“会话控制”.Session 对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session ...
- SWUST OJ(1035)
定位顺序表中最大和最小值 #include<iostream> #include<cstdlib> using namespace std; int main(int argc ...
- selenium自动化定位方式
自动化定位方式 1.String Xpath = String.format("//*[@id=\"saveFileKeyWordsBtnHand\"]/../../.. ...
- hashlib 和 hmac 算法的区别
-----md5 = hashlib.md5() md5.update(password+salt) md5.hexdigest() ----- h = hmac.new(key,password,d ...