失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 理解Git的设计思想 详解git文件夹 以及详解add commit push fetch pull merge指令

理解Git的设计思想 详解git文件夹 以及详解add commit push fetch pull merge指令

时间:2024-04-24 20:22:17

相关推荐

理解Git的设计思想 详解git文件夹 以及详解add commit push fetch pull merge指令

在项目目录执行git init,此目录将纳入git管理,git将会自动生成.git文件夹,用以记录git配置(.git/config)版本信息(commit-id)文件集合。下面是.git文件夹的目录说明:

|--.git目录:

|--branches目录:为空。

|--hooks目录:为空。

|--logs目录:记录所有commit记录。

|--HEAD:记录本地仓库当前分支的全部commit记录。

|--refs目录:

|--heads目录:记录checkout或new到本地仓库的分支的全部commit记录。

|--remotes目录:记录远端仓库的所有分支的全部commit记录。

|--objects目录:记录所有commit记录的提交内容。

|--refs目录:记录所有commit记录的commit-id引用。

|--heads目录:记录checkout或new到本地仓库的分支的最新commit-id引用。

|--remotes/origin目录:记录远端仓库的所有分支的最新commit-id引用。

|--tags目录:记录所提交的tag。

|--config:配置信息文件。记录当前项目的git远端仓库链接、checkout到本地的远端分支的信息(如fetch到哪些目录文件、merge哪个分支)等。

|--FETCH_HEAD:记录文件。记录了远端仓库remote repo所有分支的最新commit-id。

|--HEAD:映射文件。记录了当前分支的Local Head是映射到哪个commit-id。

|--ORIG_HEAD:映射文件。当前分支从远端仓库所fetch或pull下来的最新commit-id。

|--index:临时暂存文件。执行git add指令的内容将记录在此文件。

git最重要的动作是commit!!!几乎git的所有操作都是以commit作为基准。

文件有改动但未commit,没有操作权(push、fetch、pull、merge)!

凡事记得先commit!!!

有无改动:是以上次commit的内容(文件集合和commit-id)为基础,本地当前工作空间working tree有没文件改动。

commit前后:commit了的内容(文件集合和commit-id),才有版本信息(commit-id),才进入本地仓库local repo,才真正被git拿来作对比,才能被merge和被push,才能fetch和pull。因为git进行文件对比的逻辑是,以上次commit的内容(文件集合和commit-id)为基础。

push前后:push了的内容(文件集合和commit-id),才进入远端仓库remote repo,才能被fetch和被pull。

以下操作是基于当前分支

git add:以上次commit的内容(文件集合和commit-id)为基础,本地当前工作区working tree有所改动的文件,添加一个或多个到index;

git commit:以上次commit的内容(文件集合和commit-id)为基础,叠加最新添加到index的改动文件到文件集合;并生成一个用以映射叠加后的文件集合的commit-id,写入到.git/HEAD(实际是.git/refs/heads/当前分支名);然后将文件集合和commit-id一并提交到本地仓库local repo;

git push:将本地仓库local repo最新commit的内容(文件集合和commit-id),推送到远端仓库remote repo;

以下操作是基于其他分支或远端仓库

git fetch:获取远端仓库remote repo所有分支最新push的内容(文件集合和commit-id),将commit-id写入到.git/FETCH_HEAD和.git/refs/remotes/origin/各个分支名,但不拉取文件集合中的改动部分到本地当前工作区working tree;

git pull:获取远端仓库remote repo所有分支最新push的内容(文件集合和commit-id),将commit-id写入到.git/FETCH_HEAD和.git/refs/heads/各个分支名,并拉取当前分支文件集合中的改动部分到本地当前工作区working tree;等于git fetch+git merge;

git merge:可以合并本地仓库local repo的其他分支已commit的内容(文件集合和commit-id),也可以合并远端仓库remote repo的其他分支已push的内容(文件集合和commit-id),将文件集合中的改动部分整合到本地当前工作区working tree;merge完后commit并push,将推送到所merge的那个分支。

下载安装个TortoiseGit,新建个gitDemo的文件夹,执行git init将其纳入git管理,每一次commit、push、pull、fetch、merge操作前后,都右击gitDemo文件夹->TortoiseGit->Revision graph,看看图就很容易理解了。

如果觉得《理解Git的设计思想 详解git文件夹 以及详解add commit push fetch pull merge指令》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。