git&github自学教程(3):git基本操作:init、status、add、commit、log、diff

1,init

新建目录并用init命令初始化为git仓库。git&github自学教程(3):git基本操作:init、status、add、commit、log、diff
只要某目录下产生了.git目录,则该目录就成为一个git仓库:
git&github自学教程(3):git基本操作:init、status、add、commit、log、diff
那么.git文件当中有什么东西呢?根据官方关于git内部原理的解释可以知道:

.git目录包含了几乎所有 Git 存储和操作的东西。 如若想备份或复制一个版本库,只需把这个目录拷贝至另一处即可。

新初始化的 .git 目录的典型结构可进入该目录后执行ls -lRF查看.

  • description 文件仅供 GitWeb 程序使用,我们无需关心。
  • config 文件包含项目特有的配置选项。
  • info 目录包含一个全局性排除(global exclude)文件, 用以放置那些不希望被记录在 .gitignore文件中的忽略模式(ignored patterns)。
  • hooks 目录包含客户端或服务端的钩子脚本(hook scripts)
  • objects 目录存储所有数据内容;
  • refs 目录存储指向数据(分支、远程仓库和标签等)的提交对象的指针;
  • HEAD 文件指向目前被检出的分支;
  • index 文件保存暂存区信息。
    其中HEAD 文件、(尚待创建的)index 文件,和 objects 目录、refs 目录。 它们都是 Git 的核心组成部分。

这涉及到git内部工作原理,详见知识系列。

2,status

git status命令用于显示 Git 仓库的状态
新建一个README.md文件用于在接下来的过程中探究git中的一些状态及关系:
git&github自学教程(3):git基本操作:init、status、add、commit、log、diff
首先要说明的是,工作目录下的每一个文件都只有两种状态:已跟踪Tracked或未跟踪Untracked。

  • 已跟踪的文件是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后, 它们的状态可能是未修改,已修改或已放入暂存区。
  • 工作目录中除已跟踪文件外的其它所有文件都属于未跟踪文件,它们既不存在于上次快照的记录中,也没有被放入暂存区。

初次克隆某个仓库的时候,工作目录中的所有文件都属于已跟踪文件,并处于未修改状态,因为 Git 刚刚检出了它们, 而你尚未编辑过它们。

编辑过某些文件之后,由于自上次提交后你对它们做了修改,Git 将它们标记为已修改文件。
git&github自学教程(3):git基本操作:init、status、add、commit、log、diff

此时README.md就是一个Untracked file。

3,add

用于向暂存区中添加文件。
要想让README.md文件成为 Git 仓库的管理对象,就需要用 git add命令将其加入暂存区( Stage 或者 Index)中:git&github自学教程(3):git基本操作:init、status、add、commit、log、diff

4,commit

git commit命令可以将当前暂存区中的文件实际保存到仓库的历
史记录中
。通过这些记录,我们就可以在工作树中复原文件。

  1. 记录一行提交信息
    在-m参数后添加提交信息。
    git&github自学教程(3):git基本操作:init、status、add、commit、log、diff
  2. 记录更详细的提交信息
    如果一行提交信息不足以描述,就直接执行git commit命令,git会启动一个编辑器用于记录提交信息,完毕后保存并关闭编辑器即可。
  3. 每次提交后都记得查看一次状态
    git&github自学教程(3):git基本操作:init、status、add、commit、log、diff

5,log

git log命令可以查看以往仓库中提交的日志。
git&github自学教程(3):git基本操作:init、status、add、commit、log、diff

  1. 显示指定目录、文件的日志
    git&github自学教程(3):git基本操作:init、status、add、commit、log、diff

  2. 显示文件的改动
    只查看 README.md 文件的提交日志以及提交前后的差别.
    git&github自学教程(3):git基本操作:init、status、add、commit、log、diff

6,diff

git diff命令可以查看工作树、暂存区、最新提交之间的差别。
首先在README.md中添加一条内容:
git&github自学教程(3):git基本操作:init、status、add、commit、log、diff

  1. 查看工作树和暂存区的差别:
    git&github自学教程(3):git基本操作:init、status、add、commit、log、diff
    尚未用 git add命令向暂存区添加任何东西,所以程序只会显示工作树与最新提交状态之间的差别。
    用 git add命令将 README.md 文件加入暂存区并执行diff:
    git&github自学教程(3):git基本操作:init、status、add、commit、log、diff
    发现结果什么都不会显示,这是因为工作树和暂存区的状态并无差别。

  2. 查看工作树和最新提交的差别:
    执行git diff HEAD:
    git&github自学教程(3):git基本操作:init、status、add、commit、log、diff
    这里的 HEAD 是指向当前分支中最新一次提交的指针。
    在执行 git commit命令之前先执行git diff HEAD命令,查看本次提交与上次提交之间有什么差别,等确认完毕后再进行提交
    git&github自学教程(3):git基本操作:init、status、add、commit、log、diff