美文网首页
Git命令-git暂存区

Git命令-git暂存区

作者: BlueSocks | 来源:发表于2023-07-17 11:24 被阅读0次

    1. 暂存区概念

    • 工作区(Working Directory)

    通俗点来说,进行代码编写的文件都属于工作区。比如新建个项目,根目录为learngitlearngit文件夹就是一个工作区,然后我们会在learngit项目创建文件、编写代码,这些操作都是在工作区进行的。

    • 暂存区(Repository)

    在工作区修改文件后,通过git add命令,可以将修改添加到暂存区;但是执行git commit命令后,会将暂存区清空。

    • 版本库(Repository)

    learngit目录下,通过git init创建git本地仓库后,会多出一个隐藏目录.git.git就是git的版本库。

    Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

    我们把文件往Git版本库里添加的时候,是分两步执行的:

    1. git add把文件添加进去,实际上就是把文件修改添加到暂存区;
    2. git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

    2. Git添加修改到版本库

    1. 创建git本地仓库
    //在合适的目录下创建learngit目录,在learngit目录下创建git仓库
    $ git init
    //创建文件
    $ touch test.txt
    //编辑test.txt文件,添加内容“Hello World”
    $ vim test.txt
    
    
    1. 将文件添加到暂存区
    git add test.txt
    
    
    1. 将修改提交到版本库
    git commit -m "First commit"
    
    

    3. 撤销工作区修改

    对于test.txt,经过不断的修改提交,已经有了一个稳定的版本,无需再进行修改。但是你不小心作了一点改动,在git add之前,你发现了这个改动:

    $ git status
    //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:   test.txt
    
    

    此时,可以使用git diff命令查看文件的修改:

    //HEAD表示版本库的当前版本
    $ git diff HEAD test.txt
    //输出日志
    //diff --git a/test.txt b/test.txt
    //index e69de29..e965047 100644
    //--- a/test.txt
    //+++ b/test.txt
    //@@ -0,0 +1 @@
    //+Hello
    
    

    git告诉我们,在test.txt文件中增加了“Hello”,而我们是不需要这个改动的。幸好这时候还没有执行git add命令,那么使用git checkout --命令撤销修改就可以了:

    $ git checkout -- test.txt
    
    

    4. 撤销暂存区的修改

    假设,对test.txt文件修改后,并且执行git add命令添加到了暂存区,这时候撤回修改:

    //1.先执行 git reset HEAD filename,撤销暂存区的修改
    $ git reset HEAD filename
    //2.撤销工作区修改
    $ git checkout --filename
    
    

    5. 撤销commit

    假设修改了test.txt文件,并且执行git addgit commit命令,将修改提交到了版本库,这时候想回到上个版本,可以使用git reset --hard命令:

    $ git reset --hard HEAD^
    
    

    在Git中,用HEAD表示当前版本,也就是最新的提交,上一个版本就是HEAD^,上上一个版本就是

    HEAD^^ 。当然也可以不使用HEAD,而是使用git的哈希值:

    //查看提交记录
    $ git log
    //输出日志如下
    commit 090650d054954b9bc48132e6b095f76791efc6c9 (HEAD -> main)
    Author: aaa <aaa@aaa.com>
    Date:   Fri Jun 23 20:42:27 2022 +0800
        修改test.txt
    commit 168563df7667d6617e1cbe73a3201e4a5b9bf698
    Author: aaa <aaa@aaa.com.cn>
    Date:   Fri Jun 22 20:04:15 2022 +0800
        First commit
    //这时候就可以使用git哈希值回到任一版本
    $ git reset --hard 090650d054954b9bc48132e6b095f76791efc6c9
    
    

    对于git reset命令,有3种参数可选 --soft、--mixed、--hard:

    • soft,

    仅仅移动版本库HEAD指针,其他什么事都不做,即暂存区、工作区不会重置

    • mixed

    reset默认的,移动版本库HEAD指针,重置暂存区,但不重置工作区。就比如说你从当前版本回退到历史版本,你工作区更改的文件和代码都是不会变成历史版本的。

    • hard

    移动版本库HEAD指针,重置暂存区和工作区。 彻底回退到某个版本,本地的代码也会变为某个版本的内容,此命令慎用! 如果真要使用,建议先commit提交一份到本地库里,后悔再git reset回去

    6. 总结

    • 什么是暂存区?

    项目目录可以看作是一个工作区,对项目中所有文件的修改都是在工作区进行;执行git add命令后,会将修改的文件放到暂存区;执行git commit命令后,会将修改的文件更新到版本库,同时清空暂存区内容。

    • 不小心改乱了工作区内容,如何撤销?
    $ git checkout -- filename
    
    
    • 不小心改乱了工作区内容,并且执行git add命令添加到了暂存区,如何撤销?
    //1.先执行 git reset HEAD filename,撤销暂存区的修改
    $ git reset HEAD filename
    //2.撤销工作区修改
    $ git checkout --filename
    
    
    • 已经提交了不合适的修改到版本库时,如何撤销?
    $ git reset --hard commit_id
    
    

    相关文章

      网友评论

          本文标题:Git命令-git暂存区

          本文链接:https://www.haomeiwen.com/subject/vqlgudtx.html