1 - 概述
Git 是一种分布式 (Distributed) 版本控制系统 (Version Control System),用于记录一个或若干个文件内容的变化,查阅和回溯。
对应集中式版本控制系统,如 SVN,集中式的弊端为需要一个中央处理器,中央处理器单点故障,就无法协同工作。或可能丢失全部数据。
分布式通俗说就是到处都有, Git 每个用户本地都包含完整的仓库,中央处理器故障或者断网的情况下都不影响本地工作,仍然可以进行提交、回退等操作。Git 的工作方式就是记录追踪的文件的更改。
Git 目录中的文件主要有两种状态:追踪和未追踪,追踪状态又可细分为三种,所以有四种状态:
- 未追踪 (Untracked): 此类文件的修改不受 Git 管理,剩余的三类文件即为 追踪 状态。
- 未修改 (Unmodified): Git 管理并记录此类文件,当前处于与前一个版本一致未发生变化的状态。
- 修改 (Modified): 此类文件为 未修改 状态被修改后的状态,通过添加到暂存区可以进入 暂存 状态
- 暂存 (Staged): 追踪的文件被修改的文件后,添加到暂存区,即可进入 暂存 状态。此状态的文件被提交后将恢复为 未修改 状态。
2 - 三个区域
Git 主要包括三个区域:
- 工作区 (Working directory): 实际的代码,目录
- 暂存区 (Stage 或 Index): 所有添加到暂存区的修改,用于构成下一次提交 (commit)
- 本地仓库 (Repository)
如图:
工作区 里的修改通过 git add
添加到 暂存区,这些内容再通过 git commit
提交到 本地仓库 。
本地仓库的修改通过 git push
推送到远端仓库,远端仓库的修改通过 git pull
更新到本地仓库。
此外还有一个区域用于贮存代码,这个区的存储结构为栈结构,先进后出,通过 git stash
来处理。
3 - 用途
理解 Git 的工作原理,有助于更好的使用 Git 的命令,如
git reset [--mixed | --soft | --hard ] [<commit>]
列举出的 git reset
的三个选项用于确定作用范围。
- soft 只修改本地仓库的提交历史
- mixed 除了修改本地仓库的提交历史,也会修改暂存区的文件
- hard 会影响到这三个区域
注:使用 --hard 时 需要非常谨慎,会造成本地代码修改丢失。