git(一)

1.git 基础知识

版本控制系统

  • 本地版本控制系统
    git(一)_第1张图片
  • 集中化的版本控制系统
    git(一)_第2张图片
  • 分布式版本控制系统
    git(一)_第3张图片

文件记录方式

git(一)_第4张图片

每次提交更新,或在 Git 中保存项目状态时,它主要对当时的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。 Git 对待数据更像是一个快照流。Git 保证完整性Git 中所有数据在存储前都计算校验和,然后以校验和来引用。 这意味着不可能在 Git 不知情时更改任何文件内容或目录内容。 ​ 这个功能建构在 Git 底层,是构成 Git 功能不可或缺的部分。若你在传送过程中丢失信息或损坏文件,Git 就能发现。Git 用以计算校验和的机制叫做 SHA-1 散列(hash,哈希)。 这是一个由 40 个十六进制字符(0-9 和 a-f)组成的字符串,基于 Git 中文件的内容或目录结构计算出来。 ​ SHA-1 哈希看起来是这样: 24b9da6552252987aa493b52f8696cd6d3b00373Git 中使用这种哈希值的情况很多,你将经常看到这种哈希值。 实际上,Git 数据库中保存的信息都是以文件内容的哈希值来索引,而不是文件名。

常用术语

  • 仓库(Repository)

    受版本控制的所有文件修订历史的共享数据库

  • 工作空间(Workspace)

    本地硬盘或Unix 用户帐户上编辑的文件副本

  • 工作树/区(Working tree)

    工作区中包含了仓库的工作文件。您可以修改的内容和提交更改作为新的提交到仓库。

  • 暂存区(Staging area)

    暂存区是工作区用来提交更改(commit)前可以暂存工作区的变化。

  • 索引(Index)

    索引是暂存区的另一种术语。

  • 签入(Checkin)

    将新版本复制回仓库

  • 签出(Checkout)

    从仓库中将文件的最新修订版本复制到工作空间

  • 提交(Commit)

    对各自文件的工作副本做了更改,并将这些更改提交到仓库

  • 冲突(Conflict)

    多人对同一文件的工作副本进行更改,并将这些更改提交到仓库

  • 合并(Merge)

    将某分支上的更改联接到此主干或同为主干的另一个分支

  • 分支(Branch)

    从主线上分离开的副本,默认分支叫master

  • 锁(Lock)

    获得修改文件的专有权限。

  • 头(HEAD)

    头是一个象征性的参考,最常用以指向当前选择的分支。

    指向当前所在的本地分支(译注:将 HEAD 想象为当前分支的别名)

  • 修订(Revision)

    表示代码的一个版本状态。Git通过用SHA1 hash算法表示的ID来标识不同的版本。

  • 标记(Tags)

    标记指的是某个分支某个特定时间点的状态。通过标记,可以很方便的切换到标记时的状态。

  • unmerged

    因包含合并冲突而处于未合并(unmerged)状态的文件:

四个工作区域

git(一)_第5张图片

  • git add files 把当前文件放入暂存区域。
  • git commit给暂存区域生成快照并提交。
  • git reset -- files 用来撤销最后一次git add files,你也可以用git reset 撤销所有暂存区域文件。
  • git checkout -- files 把文件从暂存区域复制到工作目录,用来丢弃本地修改。
  • git commit -a 相当于运行 git add 把所有当前目录下的文件加入暂存区域再运行。
  • git commit files 进行一次包含最后一次提交加上工作目录中文件快照的提交。并且文件被添加到暂存区域。
  • git checkout HEAD -- files 回滚到复制最后一次提交。

文件的四种状态

git(一)_第6张图片

  • Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
  • Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified.
  • Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改
  • Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存,文件状态为Modified

状态图

git(一)_第7张图片

  • 新建文件--->Untracked
  • 使用add命令将新建的文件加入到暂存区--->Staged
  • 使用commit命令将暂存区的文件提交到本地仓库--->Unmodified
  • Unmodified如果对Unmodified状态的文件进行修改--->modified
  • modified如果对Unmodified状态的文件进行remove操作--->Untracked

你可能感兴趣的:(git)