git init 是什么
git init 在当前目录创建 Git 仓库:生成 .git 目录用于存放对象库、引用与仓库级配置,并给出初始分支。它不会下载任何远端内容,也不会自动提交文件,只是把普通目录变成可被 Git 管理的目录。要同时关联远端,需要再执行 git remote add。
初始分支名从哪来
初始分支默认是 master,Git 2.28 起可以用 -b 指定,也可以通过 init.defaultBranch 配置默认值。已经有 .git 的目录重复执行 init 不会清空历史,它只是重新应用一遍仓库配置,所以不能用它来「重置」仓库。
基本信息
| 适用平台 | Linux / macOS / Windows(Git 2.28 起支持 -b) |
|---|---|
| 语法 | git init [-b <分支名>] [目录] |
| 产物 | .git 目录与仓库级配置 |
| 默认分支 | 由 -b 或 init.defaultBranch 决定 |
| 是否联网 | 不联网,不取任何远端数据 |
典型使用场景
- 新项目落地:本地代码从这一刻开始纳入版本控制
- 空仓库打底:先用 init 建仓库,再 remote add 关联远端
- 统一初始分支:用 init.defaultBranch 让新仓库默认叫 main
- 裸仓库:用 --bare 建不带工作区的仓库,适合做中央仓库
- 确认位置:动手前判断自己是否已经在某个仓库内部
常用示例
常用示例
git init # 在当前目录初始化仓库
git init -b main myrepo # 指定初始分支名并新建目录
git init --bare share.git # 建裸仓库,用作中央仓库
git config --global init.defaultBranch main # 新仓库默认用 main
git rev-parse --show-toplevel # 确认自己处在哪个仓库里
git remote add origin <仓库地址> # 初始化后关联远端初始化后先做什么
| 步骤 | 命令 | 目的 |
|---|---|---|
| 确认位置 | git rev-parse --show-toplevel | 避免建在别人仓库里面 |
| 设置身份 | git config user.email | 让提交能归属到账号 |
| 写忽略规则 | 编辑 .gitignore | 避免把产物与密钥提交上去 |
| 首次提交 | git add -A 后 commit | 建立第一个可回溯的版本 |
在已有仓库的子目录里执行 init 会新建一层仓库,形成嵌套。动手前用 git rev-parse --show-toplevel 确认自己所在的位置。
Git 2.28 之前不支持 -b。可以先 init,再用 git symbolic-ref HEAD refs/heads/main 把当前分支调整成想要的名字。
裸仓库没有工作区,不能直接在里面修改文件,它的用途是充当团队共享的中央仓库或镜像源;成员日常的编辑与提交仍然发生在各自的普通克隆里。
保留目录结构但要重新开始历史时,需要删掉 .git 再重新 init,这一步会永久丢弃原有提交记录,动手前确认没有需要保留的历史。