zoukankan      html  css  js  c++  java
  • 工作区和暂存区

    • 工作区(working directory)

    就是你在电脑里能看到的目录,比如我的learngit文件夹就是一个工作区:

    • 版本库(repository)

    工作区中有一个隐藏目录.git,这个不算工作区,而是git的版本库。

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

    把文件网git版本库里添加的时候,分为两步执行:

    第一步是用git add把文件添加进去,实际上就是办文件修改添加到暂存区;

    第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

    因为在我们创建git版本库时,git自动为我们创建了唯一一个master分支,所以现在git commit就是往master分支上提交更改。

    简单的理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。

    例如修改readme.txt加上一行内容,然后添加一个新文件license,然后看一下git的状态:

     zhangkai@bogon � ~/git_zk/learngit � � master ● � cat readme.txt 
    git is a distributed version control system.
    git is free software distributed under the GPL.
    git has a mutable index called stage.
     zhangkai@bogon � ~/git_zk/learngit � � master ● � git status
    On branch master
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    
        modified:   readme.txt
    
    no changes added to commit (use "git add" and/or "git commit -a")
     zhangkai@bogon � ~/git_zk/learngit � � master ● � vim license
     zhangkai@bogon � ~/git_zk/learngit � � master ● � git status 
    On branch master
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    
        modified:   readme.txt
    
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
    
        .DS_Store
        license
    
    no changes added to commit (use "git add" and/or "git commit -a")
     zhangkai@bogon � ~/git_zk/learngit � � master ● � 

    git告诉我们,readme.txt被修改了,而license还没有被添加过,所以他的状态是untracked。

    现在用git add把readme.txt和license都添加了,然后用git status在看一下:

     zhangkai@bogon � ~/git_zk/learngit � � master ● � git add readme.txt license .DS_Store
     zhangkai@bogon � ~/git_zk/learngit � � master ✚ � git status 
    On branch master
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
    
        new file:   .DS_Store
        new file:   license
        modified:   readme.txt
    
     zhangkai@bogon � ~/git_zk/learngit � � master ✚ � 

    现在,暂存区的状态就变成这样了:

    所以git add命令实际上就是把要提交的所有修改放到暂存区(stage),然后执行git commit就可以一次性把暂存区的所有修改提交到分支。

     zhangkai@bogon � ~/git_zk/learngit � � master ✚ � git commit -m "add files"    
    [master cf88bf6] add files
     3 files changed, 5 insertions(+)
     create mode 100644 .DS_Store
     create mode 100644 license
     zhangkai@bogon � ~/git_zk/learngit � � master � 

    一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是干净的:

     zhangkai@bogon � ~/git_zk/learngit � � master � git status
    On branch master
    nothing to commit, working directory clean
     zhangkai@bogon � ~/git_zk/learngit � � master � 

    现在版本库变成了这样,暂存区就没有任何内容了:

    小结

    一点要知道暂存区和工作区的区别,要知道git到底操作了什么。

  • 相关阅读:
    emberjs 循环中设置model的不同属性值
    FUTURE .get 异常抛出会如何提示
    cpu ,鲲鹏,x86,主频,门电路,目录
    复制两个类的相同属性
    【深入Java虚拟机(1)】:Java内存区域与内存溢出
    RPC web service
    webservice
    django中配置Pymsql
    定义函数和调用函数的方式,函数形参和实参的介绍
    python名称空间与作用域
  • 原文地址:https://www.cnblogs.com/allan-king/p/5429752.html
Copyright © 2011-2022 走看看