Skip to content

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 addgit commit

背后发生了什么

运行 git init 时,Git 创建:

  • objects/——以压缩对象形式存储文件内容和提交
  • refs/heads/——分支指针所在(初始为空)
  • refs/tags/——标签指针所在
  • HEAD——指向当前分支的文件(初始为 refs/heads/mainrefs/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 项目都这样开始。

动手试一试

常见错误

错误写法

在已初始化的仓库中运行 git init

正确做法

再次运行 git init 是安全的,但通常意味着你在错误的目录。先用 ls -a 检查是否有 .git 文件夹。如果有,仓库已初始化。

错误写法

在 home 目录或根文件夹中初始化 Git

正确做法

运行 git init 前务必 cd 进具体项目目录。在 home 目录初始化会追踪电脑上的每个文件,后果灾难性。

相关速查表

查阅不认识的术语

新手友好的术语表用大白话解释编程术语——变量、函数、DOM、Promise 等等。

查看术语表

动手做项目

通过引导式项目应用所学,含起始代码与解决方案。

查看项目

解读错误信息

用大白话解释常见错误——什么意思、为什么发生、如何修复。

查看错误