git init 后必须 git add . 才能提交,因 init 仅创建 .git 目录,不自动跟踪文件;直接 commit 会提示“nothing to commit”,因暂存区为空。

git init 之后必须 git add . 才能提交
本地文件夹没被 Git 跟踪时,git init 只是创建了 .git 目录,不会自动把现有文件加入版本控制。直接 git commit 会提示 “nothing to commit”,因为暂存区为空。
-
git add .是最常用方式,把当前目录下所有未忽略的文件加入暂存区(注意:它不递归进入已存在的子 Git 仓库) - 如果只想加部分文件,比如只提交源码不提交构建产物:
git add src/ README.md - 执行后用
git status确认文件变成绿色(staged),再提交才有效
git remote add origin 后必须确认分支名是 main 还是 master
GitHub、Gitee 新建仓库默认主分支名已是 main,但很多老项目或自建 GitLab 仍用 master。推错分支名会导致 git push 报错 “failed to push some refs” 或远程仓库空空如也。
- 先查远程仓库实际分支名:打开仓库网页 → 点击分支切换按钮(通常在文件列表上方),看高亮显示的是
main还是master - 本地可统一改成
main:git branch -M main(-M表示强制重命名当前分支) - 关联时别漏掉
origin别名,git remote add origin https://...中的origin是后续命令的 shorthand,不能写成其他名字后又沿用origin
远程有 README.md 时 git pull 必须加 --allow-unrelated-histories
如果远程仓库已存在文件(比如你勾选了初始化 README.md),直接 git push 会被拒绝,提示 “rejected non-fast-forward”。此时不能跳过拉取,否则本地和远程历史完全无关,Git 默认禁止合并。
- 先执行
git pull origin main --allow-unrelated-histories(把main换成你查到的实际分支名) - 这会触发一次合并提交,内容可能是 “Merge branch 'main' of https://...” —— 正常现象,不是错误
- 合并后
git status应显示 “Your branch is ahead of 'origin/main' by 1 commit”,说明可以安全推送了 - 漏掉这个参数是新手最常卡住的地方,报错信息
fatal: refusing to merge unrelated histories就是明确提示
git push -u origin main 的 -u 参数只用第一次
-u(即 --set-upstream)的作用是把本地分支和远程分支“绑死”。绑完之后,后续 git push 和 git pull 就不用再写 origin main 了。
- 首次推送务必带
-u:git push -u origin main - 之后日常提交只需:
git add . && git commit -m "xxx" && git push - 如果忘了加
-u,可以用git branch --set-upstream-to=origin/main main补救 - 不绑定上游分支也能推,但每次都要写全参数,容易手误,也影响 IDE 集成(比如 VS Code 的 Git 面板可能无法识别当前跟踪关系)
git status 输出和远程网页上的分支名,比背命令管用得多。











