git init
用 git init 创建新 Git 仓库,以及背后发生了什么。
你将学到
- 如何初始化新 Git 仓库
- git init 在 .git 文件夹中创建了什么
- 如何重新初始化或检查现有仓库
- 默认分支名及如何更改
概念讲解
git init 做什么
git init 把普通目录变成 Git 仓库。它创建隐藏的 .git 子目录,并填充 Git 开始追踪变更所需的结构。
mkdir my-project
cd my-project
git init
运行后,目录就是 Git 仓库了——但它是空的。还没有文件被追踪。接下来的步骤通常是创建文件、git add、git commit。
背后发生了什么
运行 git init 时,Git 创建:
objects/——以压缩对象形式存储文件内容和提交refs/heads/——分支指针所在(初始为空)refs/tags/——标签指针所在HEAD——指向当前分支的文件(初始为refs/heads/main或refs/heads/master)config——仓库特定配置description——占位文件(很少使用)
还没有任何提交——仓库有零个提交和零个分支,直到你做第一次提交。
默认分支名
历史上,Git 的默认分支叫 master。自 2020 年起,社区转向使用 main 作为默认,Git 本身在 2.28 版本更改了默认。
你可以全局设置默认分支名:
git config --global init.defaultBranch main
如果你的仓库以 master 创建,想重命名:
git branch -m main
重新初始化
在现有仓库中运行 git init 是安全的——它不会覆盖任何东西,只是确保 .git 结构完整。手动复制 .git 文件夹后或结构损坏时可能会这样做。
用 clone 代替 init
如果你想处理已有仓库(例如 GitHub 上的开源项目),用 git clone 而非 git init:
git clone https://github.com/user/repo.git
这会下载整个仓库(包括所有历史),并自动设置远程连接。
示例代码
# 开始一个全新项目
mkdir weather-app
cd weather-app
# 初始化 Git——这会创建 .git 文件夹
git init
# 输出: "Initialized empty Git repository in .../weather-app/.git/"
# 设置默认分支名(全局做一次,适用于所有新仓库)
git config --global init.defaultBranch main
# 创建初始文件
echo "# Weather App" > README.md
# 暂存并提交第一个文件
git add README.md
git commit -m "Initial commit: add README"
# 查看结果——现在你有一个带一次提交的仓库
git log --oneline
git status
# 如果初始化时分支名不对,重命名它
git branch -m main
完整的首次运行流程:创建目录、初始化 Git、设置默认分支、做第一次提交、验证结果。每个新 Git 项目都这样开始。
动手试一试
- .gitignore Generator
为新仓库生成 .gitignore。
- Env File Generator
创建 .env 文件——应该 gitignore,永远不要提交。
常见错误
错误写法
在已初始化的仓库中运行 git init
正确做法
再次运行 git init 是安全的,但通常意味着你在错误的目录。先用 ls -a 检查是否有 .git 文件夹。如果有,仓库已初始化。
错误写法
在 home 目录或根文件夹中初始化 Git
正确做法
运行 git init 前务必 cd 进具体项目目录。在 home 目录初始化会追踪电脑上的每个文件,后果灾难性。
相关资源
相关速查表
- Git Cheatsheet
git init 与仓库设置命令。
查阅不认识的术语
新手友好的术语表用大白话解释编程术语——变量、函数、DOM、Promise 等等。
动手做项目
通过引导式项目应用所学,含起始代码与解决方案。
解读错误信息
用大白话解释常见错误——什么意思、为什么发生、如何修复。