Git是一个分布式版本控制系统,它的工作原理基于以下关键概念和组件:
-
工作目录(Working Directory) :
这是用户正在进行更改的本地目录。它包含了项目的所有文件和子目录。
-
暂存区(Staging Area,也被称为索引) :
暂存区是一个文件,通常位于
.git
目录下,它保存了下一次提交(commit)将包含的文件的信息。当你执行git add
命令时,变更(添加、修改、删除的文件)被放到这个暂存区域。 -
本地仓库(Local Repository) :
本地仓库是位于你的本地计算机上的一个目录,它由Git维护,并存储了项目的历史记录和变更数据。执行
git commit
命令时,暂存区中的变更会被记录到本地仓库中。 -
远程仓库(Remote Repository) :
远程仓库是位于网络上的服务器(如GitHub、GitLab或Bitbucket)上的版本库,它允许多个用户共享和协作。通过
git push
命令,你可以将本地仓库的变更推送到远程仓库;通过git pull
或git fetch
命令,你可以从远程仓库拉取变更到本地仓库。 -
分支(Branch) :
分支是项目开发的不同线路。默认分支是主分支(通常称为
master
或main
)。你可以创建新分支来开发新功能或修复错误,而不会影响主分支。 -
提交(Commit) :
提交是项目历史的一个快照,包含了自上次提交以来对工作目录中文件的更改。每个提交都有一个唯一的ID(通常是一个SHA-1哈希)。
Git的工作流程通常包括以下步骤:
-
克隆(Clone) :
从远程仓库克隆项目到本地计算机。
-
修改(Modify) :
在工作目录中添加、编辑或删除文件。
-
暂存(Stage) :
使用
git add
命令选择你希望包含在下次提交中的更改。 -
提交(Commit) :
使用
git commit
命令将暂存的更改保存到本地仓库。每次提交都会记录下谁做了哪些更改以及何时做的。 -
推送(Push) :
使用
git push
命令将本地的变更提交推送到远程仓库,以便其他人可以看到。 -
拉取/抓取(Pull/Fetch) :
使用
git pull
命令将远程仓库的变更拉取到本地仓库并合并。git fetch
命令则是只拉取变更,但不自动合并。 -
合并(Merge) :
当你在分支中完成工作后,可以将这些变更合并回主分支。
-
冲突解决(Conflict Resolution) :
如果两个分支对同一文件的同一部分进行了不同的更改,那么在合并时可能会发生冲突。这时,你需要手动解决这些冲突。
Git通过这些基本概念和操作,提供了一个强大的工具集,用于跟踪、共享和协作代码开发。
参考
https://git-scm.com/video/what-is-git
https://git-scm.com/book/zh/v2
https://www.getdbt.com/analytics-engineering/transformation/git-workflow