Git 使用笔记
1. Git 的基本流程
Git 用来管理本地项目版本,GitHub 用来保存远程仓库。
平时最常用的流程就是:
修改文件 → 暂存改动 → 提交版本 → 推送到远程仓库
常用命令:
git statusgit add .git commit -m "本次修改说明"git push origin main
含义:
git status:查看当前仓库状态git add .:把当前目录下改动加入暂存区git commit -m "说明":提交一次本地版本git push:把本地提交推送到 GitHub
如果是第一次上传项目,一般流程是:
git initgit add .git commit -m "初始化项目"git branch -M maingit remote add origin 仓库地址git push -u origin main
以后日常更新通常只需要:
git add .git commit -m "更新说明"git push origin main
2. 遇到的问题
问题 1:没有 add 就直接 commit
报错现象:
Untracked filesnothing added to commit but untracked files present
原因:
文件只是存在,但还没有加入暂存区,所以不能直接提交。
解决方法:
git add .git commit -m "初始化项目"
问题 2: push 被拒绝
报错现象:
rejectednon-fast-forwardUpdates were rejected because the tip of your current branch is behind its remote counterpart
原因:
远程仓库比本地更新,本地分支落后于远程分支,不能直接推送。
解决方法:
git pull origin main --allow-unrelated-historiesgit push origin main
问题 3: pull 时提示本地修改会被覆盖
报错现象:
Your local changes to the following files would be overwritten by merge
原因:
本地文件已经改过,远程对应文件也有变化,直接拉取会覆盖本地内容,所以 Git 拒绝合并。
解决方法:
git add .git commit -m "本地修改先保存"git pull origin main --allow-unrelated-histories --no-rebasegit push origin main
问题 4:文件删除或重命名后, git status 显示删除和新增
现象:
- 原文件显示
deleted - 新文件显示
Untracked files
原因:
Git 检测到旧文件没了,同时又出现了新文件。
这通常是删除、重命名,或者编辑器重新生成文件导致的。
解决方法:
如果这些变化本来就是想保留的,就执行:
git add -Agit commit -m "update posts"git push origin main
说明:git add -A 比 git add . 更适合处理“新增 + 删除 + 修改”同时存在的情况。
如果是误删文件,可以恢复:
git restore "source/_posts/2026-04-10 Friday.md"
问题 5:Git Bash 中文文件名显示乱码
现象:
文件名显示成类似这种形式:
"source/_posts/Zotero\350\256\347\275\256.md"
原因:
这是 Git Bash 对中文路径显示不友好,不一定是文件有问题。
结论:
一般不会影响提交和推送,只是终端显示不直观。
问题 6:GitHub 仓库改名后, push 出错
现象:
This repository moved. Please use the new location
原因:
GitHub 上仓库改名了,但本地仓库的远程地址还是旧的。
解决方法:
git remote set-url origin 新仓库地址git remote -v
例如:
git remote set-url origin https://github.com/nnoon010911/NNOON-Blog.gitgit remote -v
问题 7:仓库改名后,远程分支状态不一致, push 仍失败
报错现象:
remote rejectedcannot lock ref 'refs/heads/main'is at ... but expected ...
原因:
本地记录的远程分支状态和 GitHub 当前状态不一致,所以 Git 拒绝直接推送。
更具体地说,就是:
- 远程
main分支已经变化了 - 但本地还是按旧状态去 push
- Git 发现远程引用状态和自己预期不同,于是拒绝更新
这类问题常见于:
- 仓库刚改过名字
- 本地没有先同步远程最新状态
- 远程分支被网页端或其他操作更新过
解决方法:
git remote set-url origin 新仓库地址git fetch origingit pull --rebase origin maingit push origin main
如果 pull --rebase 过程中冲突,需要先解决冲突,再执行:
git add .git rebase --continuegit push origin main
问题 8:已经 commit 了,但 push 还是报 cannot lock ref
现象:
已经成功执行了 git commit ,但继续执行 git push 时仍然出现:
remote rejectedcannot lock ref 'refs/heads/main'is at ... but expected ...
原因:
这说明问题不在本地文件有没有提交,而在于远程 main 分支的状态和本地记录不同步。
也就是说,即使本地已经 commit,只要没有先同步远程最新状态,push 仍然可能失败。
这类报错的本质是:
- 你的本地提交没有问题
- 远程仓库也没有说你代码有问题
- 真正的问题是远程
main分支指针已经变化,而你本地还按旧记录去更新它
最短处理方案:
git fetch origingit pull --rebase origin maingit push origin main
说明:
git fetch origin:先抓取远程最新状态,但不直接改本地文件git pull --rebase origin main:把远程最新提交拉下来,再把你本地提交接到后面git push origin main:本地和远程对齐后再推送
如果 pull --rebase origin main 报冲突,就先解决冲突,再执行:
git add .git rebase --continuegit push origin main