Git:基础
跳到导航
跳到搜索
.git文件夹
.git文件夹结构如下:
└── .git ├── hooks # (Folder)存放一些shell脚本,可以设置特定的git命令后触发相应的脚本 ├── info # (Folder)仓库的其他信息 │ └── exclude # 本地的排除文件规则,功能和.gitignore类似 ├── logs # (Folder)保存所有更新操作的引用记录,主要用于git reflog等 ├── modules # (Folder)项目的子模块内容(需要git submodule操作) ├── objects # (Folder)所有文件的存储对象 ├── refs # (Folder)保存分支和标签的引用 │ └── heads # (Folder)本地分支引用 │ └── remotes # (Folder)远程分支引用 │ └── tags # (Folder)标签的引用(通过git tag生成) │ └── stash # 保存的工作现场(通过git stash生成) ├── COMMIT_EDITMSG # 最新的commit message ├── config # 仓库的配置文件 ├── description # 仓库的描述信息,主要给gitweb使用 ├── FETCH_HEAD # 用于追踪远程分支的拉取与合并 ├── HEAD # 指向当前分支 ├── index # 二进制暂存区(stage) └── ORIG_HEAD # 用于件进行危险操作时备份HEAD
工作区、暂存区、版本库
- 工作区:(
workspace
)就是电脑里的工作目录。 - 暂存区:(
stage
/index
)。就是存放在.git
目录下的index
文件(即.git/index
)。 - 版本库:(
repository
)就是工作区的隐藏目录.git
。
其中:
- HEAD:当前活跃分支的游标;
- objects:Git的对象库,位于 ".git/objects" 目录下,包含了创建的各种对象及内容;
- 执行
git add
命令(对工作区修改(或新增)的文件):暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中; - 执行
git commit
提交操作:暂存区的目录树写到版本库中,当前分支会做相应的更新。即HEAD
指向的目录树就是提交时暂存区的目录树; - 执行
git reset HEAD
命令:暂存区的目录树会被重写,被HEAD
指向的目录树所替换,但是工作区不受影响; - 执行
git rm --cached <file>
命令:会直接从暂存区删除文件,工作区则不做出改变; - 执行
git checkout .
(或git checkout -- <file>
)命令:会用暂存区全部或指定的文件替换工作区的文件(会清除工作区中未添加到暂存区的改动); - 执行
git checkout HEAD .
(或git checkout HEAD <file>
)命令:会用HEAD
指向的当前分支中的全部或者部分文件替换暂存区和以及工作区中的文件(不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动)。
工作流程
项目中使用Git,工作流程一般如下:
|
工作分支管理模型
项目中一般分支策略如:
|