目录
一、Git 工作流程
二、Git 基本概念
2.1 工作区
2.2 暂存区
2.3 版本库
2.4 操作流程
三、Git 仓库创建
3.1 初始化仓库
3.2 克隆仓库
一、Git 工作流程
Git 的工作流程通常包括以下几个步骤:
1. **克隆 Git 资源**:将远程 Git 仓库克隆到本地,作为工作目录。
2. **修改文件**:在克隆的资源上添加或修改文件。
3. **更新资源**:如果其他人修改了远程仓库,可以通过更新操作获取最新版本。
4. **查看修改**:在提交前,查看文件的修改内容。
5. **提交修改**:将修改提交到本地仓库。
6. **撤回提交**:如果发现提交有误,可以撤回提交并重新修改后再提交。
下图展示了 Git 的工作流程:
二、Git 基本概念
在深入了解 Git 之前,我们需要理解几个核心概念:
2.1 工作区
工作区是你在电脑上看到的目录,也就是你当前正在工作的文件夹。
2.2 暂存区
暂存区(Stage 或 Index)是 Git 中用于暂存文件修改的区域。它通常存储在 `.git/index` 文件中,因此有时也称为索引。
2.3 版本库
版本库是 Git 的核心部分,位于工作区中的 `.git` 目录。它包含了所有的版本历史记录和元数据。
下图展示了工作区、暂存区和版本库之间的关系:
- **工作区**:左侧为工作区,是你当前正在编辑的文件夹。
- **版本库**:右侧为版本库,包含了暂存区和分支信息。
- **暂存区**:版本库中标记为 "index" 的区域是暂存区。
- **分支**:标记为 "master" 的是主分支。
- **HEAD**:HEAD 是指向当前分支的指针,通常指向 master 分支。
- **对象库**:Git 的对象库位于 `.git/objects` 目录下,存储了所有版本的对象及其内容。
2.4 操作流程
- **`git add`**:当对工作区中的文件进行修改或新增时,执行 `git add` 命令会将修改内容写入暂存区,并生成一个新的对象存储在对象库中。
- **`git commit`**:提交操作会将暂存区的内容写入版本库,并更新 master 分支。
- **`git reset HEAD`**:重写暂存区的目录树,使其与 master 分支一致,但工作区不受影响。
- **`git rm --cached <file>`**:从暂存区删除文件,但工作区文件保持不变。
- **`git checkout .` 或 `git checkout -- <file>`**:用暂存区的文件替换工作区的文件,清除未添加到暂存区的改动。
- **`git checkout HEAD .` 或 `git checkout HEAD <file>`**:用 HEAD 指向的 master 分支中的文件替换暂存区和工作区的文件,清除未提交的改动。
三、Git 仓库创建
3.1 初始化仓库
你可以使用一个已存在的目录作为 Git 仓库,或者创建一个新的目录。
- **`git init`**:在当前目录初始化一个 Git 仓库。执行该命令后,会在当前目录生成一个 `.git` 目录,用于存储 Git 的元数据。
- **`git init newrepo`**:在指定目录 `newrepo` 中初始化一个 Git 仓库。
3.2 克隆仓库
你可以从现有的 Git 仓库中克隆项目到本地。
- **`git clone <repo>`**:克隆远程仓库到本地。
- **`git clone <repo> <directory>`**:克隆远程仓库到指定目录。
例如,克隆 Ruby 语言的 Git 代码仓库 Grit:
$ git clone git://github.com/schacon/grit.git
执行该命令后,会在当前目录下创建一个名为 `grit` 的目录,其中包含一个 `.git` 目录,用于保存下载的版本记录。
如果需要自定义目录名称,可以在命令末尾指定:
$ git clone git://github.com/schacon/grit.git mygrit