git 常用命令
以下是将 Git 常用命令与常见错误及解决方案整合后的 Markdown 文档:
Git 常用命令与常见问题指南
一、Git 常用命令
1. 仓库操作
初始化仓库
git init
在当前目录创建新的 Git 仓库。克隆远程仓库
git clone <仓库URL>
将远程仓库克隆到本地(如git clone https://github.com/user/repo.git
)。
2. 提交与修改
查看仓库状态
git status
显示工作区与暂存区的文件状态。添加文件到暂存区
git add <文件名>
添加指定文件到暂存区(如git add index.html
)。git add .
添加所有修改和新文件到暂存区。提交更改
git commit -m "提交说明"
将暂存区的内容提交到本地仓库。查看文件差异
git diff
显示工作区与暂存区的差异。git diff --staged
显示暂存区与最新提交的差异。
3. 分支管理
查看分支
git branch
列出所有本地分支(-a
查看所有分支,包括远程)。创建/切换分支
git branch <分支名>
创建新分支。git checkout <分支名>
切换到指定分支。git checkout -b <新分支名>
创建并切换到新分支。合并分支
git merge <分支名>
将指定分支合并到当前分支。删除分支
git branch -d <分支名>
删除本地分支(-D
强制删除未合并的分支)。变基(Rebase)
git rebase <分支名>
将当前分支的提交“移植”到目标分支上(谨慎使用)。
4. 远程仓库
关联远程仓库
git remote add origin <仓库URL>
添加远程仓库(名称通常为origin
)。推送本地提交到远程
git push origin <分支名>
推送本地分支到远程仓库(如git push origin main
)。拉取远程更新
git pull origin <分支名>
拉取远程分支并合并到当前分支(相当于git fetch
+git merge
)。获取远程更新(不合并)
git fetch origin
仅下载远程变更,需手动合并。
5. 撤销与回退
丢弃工作区修改
git checkout -- <文件名>
撤销指定文件的未暂存修改。从暂存区移除文件
git reset HEAD <文件名>
将文件移出暂存区(保留工作区修改)。回退到某个提交
git reset --hard <commit_id>
强制回退到指定提交(慎用,会丢失后续修改)。git revert <commit_id>
生成新提交以撤销指定提交的更改(安全回退)。
6. 日志与历史
查看提交历史
git log
显示提交记录(--oneline
简化输出,--graph
显示分支图)。查看文件修改历史
git blame <文件名>
显示文件的逐行修改记录。
7. 标签
创建标签
git tag <标签名>
为当前提交打标签(如git tag v1.0
)。git tag -a v1.0 -m "版本说明"
创建带注释的标签。推送标签到远程
git push origin --tags
推送所有本地标签到远程仓库。
8. 暂存临时修改
- 保存临时改动
git stash
将未提交的修改暂存起来。git stash pop
恢复最近暂存的修改并删除暂存记录。
二、Git 常见错误与解决方案
1. 合并冲突(Merge Conflict)
现象
CONFLICT (content): Merge conflict in <文件名> |
解决方案
- 打开冲突文件,手动修改
<<<<<<< HEAD
标记的冲突部分。 - 执行:
git add <冲突文件名>
git commit -m "Resolve merge conflict"
2. 提交到错误的分支
场景
在 dev
分支开发,误提交到 main
。
解决方案
- 切换到正确分支:
git checkout dev
- 复制提交:
git cherry-pick <误提交的commit_id>
- 回退原分支:
git checkout main
git reset --hard HEAD~1
3. git pull
后代码丢失
原因
远程分支覆盖了本地未推送的提交。
解决方案
- 使用
git reflog
找回丢失的commit_id
。 - 强制推送(慎用):
git push -f origin <分支名>
4. 误删未提交的文件
场景
未提交的文件被 rm
删除。
解决方案
git checkout -- <文件名> # 恢复文件 |
5. 权限错误(Permission Denied)
现象
Permission to <仓库URL> denied to <用户>. |
解决方案
- 检查远程 URL:
git remote -v
- 修改为 SSH/HTTPS 协议:
git remote set-url origin git@github.com:user/repo.git
6. git reset --hard
导致代码丢失
场景
误用 git reset --hard HEAD~3
。
解决方案
- 通过
git reflog
找回commit_id
。 - 恢复:
git reset --hard <commit_id>
7. 大文件无法推送
现象
remote: error: File is 102.00 MB; exceeds limit. |
解决方案
- 从历史中删除大文件:
git filter-branch --tree-filter 'rm -f <文件路径>' HEAD
- 强制推送:
git push -f origin <分支名>
8. 忘记切换分支导致代码混乱
场景
直接在 main
分支开发。
解决方案
- 暂存代码并创建新分支:
git stash
git checkout -b new-feature
git stash pop
9. 误提交不需要的文件
场景
提交了 .env
等临时文件。
解决方案
- 移除文件并更新
.gitignore
:git reset HEAD .env
echo ".env" >> .gitignore
git commit --amend
10. git push
被拒绝(Non-Fast-Forward)
现象
! [rejected] main -> main (non-fast-forward) |
解决方案
- 拉取远程更新并合并:
git pull origin main
- 解决冲突后重新推送。
三、常用场景示例
首次推送本地项目到远程
git init
git add .
git commit -m "Initial commit"
git remote add origin <仓库URL>
git push -u origin main解决合并冲突后提交
git add .
git commit -m "Merge branch and fix conflicts"
四、预防建议
- 频繁提交:小步提交,避免一次性提交大量代码。
- 检查分支:操作前确认
git status
。 - 备份修改:使用
git stash
或临时分支。 - 慎用强制命令:如
git push -f
和git reset --hard
。
通过结合命令与问题处理,可以更高效地使用 Git!遇到问题时,优先使用 git reflog
和 git log
查看历史记录。