Git 基础概念与仓库初始化

笔记/CICD/Git版本控制/Git 基础概念与仓库初始化

背景与动机#

Git 常用命令不要只按“背命令”来学,更应该先理解一条主线:

工作区 -> 暂存区 -> 本地仓库 -> 远程仓库

日常大多数命令都围绕这四个位置流转:

  • 工作区:你正在编辑的文件。
  • 暂存区:准备放进下一次提交的变更。
  • 本地仓库:已经提交到本机 Git 历史里的版本。
  • 远程仓库:GitHub、GitLab、Gitee 等平台上的共享仓库。

理解这条链路后,很多命令就不再是零散记忆,而是“把变更从一个位置移动到另一个位置”。

核心原理拆解#

1. Git 记录的是快照,不只是文件差异#

Git 每次提交保存的是一组文件状态快照。多个提交通过父子关系串起来,形成项目历史。

因此一个提交通常代表一次完整的意图,例如:

  • 初始化项目。
  • 添加登录表单。
  • 修复部署脚本。
  • 移除不该提交的环境文件。

好的提交不是“今天所有改动打包”,而是“一个可理解、可回退的变更单元”。

2. 工作区、暂存区、本地仓库、远程仓库#

这四个位置的职责不同:

  • 工作区保存当前文件内容。
  • 暂存区保存下一次提交要包含的内容。
  • 本地仓库保存已经提交的历史。
  • 远程仓库用于团队共享和备份。

常见命令和位置关系:

git add 工作区 -> 暂存区
git commit 暂存区 -> 本地仓库
git push 本地仓库 -> 远程仓库
git pull 远程仓库 -> 本地仓库和工作区

3. Git 配置分层#

Git 配置常见有三层:

  • 系统级:对当前机器所有用户生效。
  • 用户级:对当前系统用户生效。
  • 仓库级:只对当前仓库生效。

查看当前生效配置:

Terminal window
git config --list

设置全局用户名和邮箱:

Terminal window
git config --global user.name "your-name"
git config --global user.email "your-email@example.com"

用户名和邮箱会写入 commit 作者信息。它们不是 Git 平台账号登录凭证,而是提交记录里展示的身份信息。

如果只想在当前仓库单独设置,去掉 --global

Terminal window
git config user.name "project-name"
git config user.email "project-email@example.com"

4. git init:把普通目录变成 Git 仓库#

git init 用来初始化仓库:

Terminal window
git init

执行后,当前目录下会生成 .git 目录。这个目录保存 Git 的元数据,例如对象数据库、分支引用、当前 HEAD 指针、配置和操作日志。

日常使用时不需要手动修改 .git 目录。误删或误改它,可能导致仓库历史损坏。

5. git clone:复制远程仓库到本地#

git clone 用来把远程仓库复制到本地:

Terminal window
git clone <remote-url>

例如:

Terminal window
git clone https://github.com/user/project.git

克隆完成后,Git 会默认创建一个名为 origin 的远程仓库别名。后续 pullpush 通常都会通过这个别名和远程仓库交互。

如果想指定本地目录名:

Terminal window
git clone https://github.com/user/project.git my-project

常见陷阱#

1. 把 .git 当成普通目录清理#

.git 是仓库历史和配置的核心目录。删除它之后,当前目录就不再是 Git 仓库。

2. 混淆 Git 用户信息和平台账号#

user.nameuser.email 只是提交作者信息,不等于 GitHub、GitLab 的登录账号或 token。

3. 没弄清当前位置就执行命令#

执行 addcommitpushpull 前,先确认变更现在在哪一层:工作区、暂存区、本地仓库,还是远程仓库。

一句话总结#

Git 的基础主线是:先判断变更在哪一层,再选择命令把它移动到目标位置。

文章目录

文章目录