GitHub 代码提交完整指南
一份详细的 GitHub 代码提交指南,包含初始设置、日常流程、分支管理、常见问题解决方案和最佳实践。适合作为博客笔记收藏使用。
📑 目录
🚀 初始设置
1. 安装 Git
Windows:
- 下载地址:https://git-scm.com/download/win
- 安装时选择 “Git Bash Here”
验证安装:
git --version
2. 配置 Git 用户信息
# 设置全局用户名和邮箱
git config --global user.name "您的姓名"
git config --global user.email "your.email@example.com"
# 查看配置
git config --global --list
3. 配置 SSH 密钥(推荐)
生成 SSH 密钥:
# 生成密钥对
ssh-keygen -t ed25519 -C "your.email@example.com"
# 按提示操作,默认保存在 ~/.ssh/id_ed25519
添加 SSH 密钥到 GitHub:
- 复制公钥内容:
cat ~/.ssh/id_ed25519.pub
- 登录 GitHub → Settings → SSH and GPG keys → New SSH key
- 粘贴公钥并保存
测试 SSH 连接:
ssh -T git@github.com
4. 创建 GitHub 仓库
- 登录 GitHub
- 点击右上角 “+” → New repository
- 填写仓库名称、描述
- 选择 Public/Private
- 不要勾选 “Initialize this repository with a README”(如果本地已有代码)
- 点击 Create repository
📝 日常提交流程
标准提交流程(三步走)
# 1. 添加文件到暂存区
git add .
# 2. 提交更改
git commit -m "提交信息描述"
# 3. 推送到远程仓库
git push origin main
详细步骤说明
步骤 1:检查改动状态
# 查看工作区状态
git status
# 查看具体改动内容
git diff
# 查看已暂存的文件
git diff --staged
步骤 2:添加文件到暂存区
# 添加所有改动(推荐)
git add .
# 添加特定文件
git add README.md
git add src/main.py
# 添加整个目录
git add src/
# 交互式添加(可以选择性添加)
git add -p
# 添加所有已跟踪文件的修改(不包括新文件)
git add -u
步骤 3:提交更改
# 简单提交
git commit -m "修复bug"
# 多行提交信息
git commit -m "添加新功能
- 实现用户登录功能
- 添加数据验证
- 优化界面响应速度"
# 打开编辑器编写详细提交信息
git commit
步骤 4:推送到远程仓库
# 推送到主分支
git push origin main
# 推送到指定分支
git push origin feature-branch
# 首次推送并设置上游分支
git push -u origin main
🌿 分支管理
创建和切换分支
# 创建新分支
git branch feature-branch
# 创建并切换到新分支
git checkout -b feature-branch
# 或使用新语法
git switch -c feature-branch
# 切换到已有分支
git checkout main
git switch main
# 查看所有分支
git branch -a
# 删除本地分支
git branch -d feature-branch
# 强制删除分支
git branch -D feature-branch
推送分支到远程
# 推送新分支到远程
git push -u origin feature-branch
# 推送所有分支
git push --all origin
# 删除远程分支
git push origin --delete feature-branch
合并分支
# 切换到主分支
git checkout main
# 合并功能分支
git merge feature-branch
# 使用 rebase(保持线性历史)
git rebase feature-branch
❗ 常见问题及解决方案
问题 1:推送被拒绝(non-fast-forward)
错误信息:
! [rejected] main -> main (non-fast-forward)
error: failed to push some refs
原因: 远程仓库有本地没有的新提交
解决方案:
方案 A:先拉取再推送(推荐)
# 拉取远程最新代码
git pull origin main
# 解决可能的冲突后,再次推送
git push origin main
方案 B:强制推送(谨慎使用)
# 强制推送(会覆盖远程分支)
git push origin main --force
# 更安全的强制推送
git push origin main --force-with-lease
问题 2:合并冲突
错误信息:
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
解决方案:
# 1. 查看冲突文件
git status
# 2. 打开冲突文件,找到冲突标记
# <<<<<<< HEAD
# 本地代码
# =======
# 远程代码
# >>>>>>> branch-name
# 3. 手动解决冲突,删除冲突标记,保留需要的代码
# 4. 标记冲突已解决
git add README.md
# 5. 完成合并
git commit -m "解决合并冲突"
问题 3:提交了错误的文件
解决方案:
撤销最后一次提交(保留文件修改):
git reset --soft HEAD~1
撤销最后一次提交(不保留文件修改):
git reset --hard HEAD~1
从暂存区移除文件(保留工作区修改):
git reset HEAD <文件名>
丢弃工作区的修改:
git checkout -- <文件名>
问题 4:修改最后一次提交信息
# 修改提交信息
git commit --amend -m "新的提交信息"
# 如果已经推送,需要强制推送
git push origin main --force
问题 5:忘记添加文件到提交
# 添加遗漏的文件
git add forgotten-file.py
# 追加到上一次提交
git commit --amend --no-edit
问题 6:SSH 连接失败
错误信息:
Permission denied (publickey)
解决方案:
# 1. 检查 SSH 密钥是否存在
ls -al ~/.ssh
# 2. 启动 SSH agent
eval "$(ssh-agent -s)"
# 3. 添加 SSH 密钥
ssh-add ~/.ssh/id_ed25519
# 4. 测试连接
ssh -T git@github.com
# 5. 如果还是失败,检查 GitHub 上是否添加了公钥
cat ~/.ssh/id_ed25519.pub
问题 7:认证失败(HTTPS)
错误信息:
remote: Support for password authentication was removed
解决方案:
使用 Personal Access Token:
- GitHub → Settings → Developer settings → Personal access tokens → Tokens (classic)
- Generate new token
- 选择权限(至少勾选
repo) - 复制 token
- 推送时使用 token 作为密码
或切换到 SSH:
# 查看当前远程地址
git remote -v
# 切换到 SSH
git remote set-url origin git@github.com:username/repo.git
问题 8:大文件推送失败
错误信息:
remote: error: File is 120.00 MB; this exceeds GitHub's file size limit
解决方案:
使用 Git LFS(大文件存储):
# 1. 安装 Git LFS
# Windows: 下载 https://git-lfs.github.com/
# 2. 初始化 Git LFS
git lfs install
# 3. 跟踪大文件类型
git lfs track "*.zip"
git lfs track "*.pt" # PyTorch 模型文件
git lfs track "*.h5" # Keras 模型文件
# 4. 提交 .gitattributes
git add .gitattributes
git commit -m "添加 Git LFS 配置"
# 5. 正常添加和提交大文件
git add large-file.zip
git commit -m "添加大文件"
git push origin main
问题 9:撤销已推送的提交
方案 A:创建新提交撤销(推荐)
# 撤销指定提交(创建新提交)
git revert <commit-hash>
# 推送撤销提交
git push origin main
方案 B:重置并强制推送(危险)
# 回退到指定提交
git reset --hard <commit-hash>
# 强制推送(会覆盖远程历史)
git push origin main --force
问题 10:本地分支与远程分支不同步
# 查看本地和远程分支差异
git log main..origin/main --oneline
# 拉取远程最新代码
git fetch origin
git pull origin main
# 或使用 rebase 保持线性历史
git pull --rebase origin main
✨ 最佳实践
1. 提交信息规范
使用约定式提交格式:
# 格式:():
# 类型(type):
# feat: 新功能
# fix: 修复bug
# docs: 文档更新
# style: 代码格式调整(不影响代码运行)
# refactor: 代码重构
# perf: 性能优化
# test: 测试相关
# chore: 构建/工具相关
# ci: CI/CD 相关
# 示例:
git commit -m "feat(auth): 添加用户登录功能"
git commit -m "fix(detection): 修复姿态检测算法bug"
git commit -m "docs(readme): 更新安装说明"
2. 提交前检查清单
- 代码已测试,可以正常运行
- 没有包含临时文件、日志文件
- 提交信息清晰明确
- 已添加
.gitignore排除不需要的文件 - 没有包含敏感信息(密码、API密钥等)
3. 工作流程建议
# 1. 开始工作前,先拉取最新代码
git pull origin main
# 2. 创建功能分支
git checkout -b feature/new-feature
# 3. 开发并提交
git add .
git commit -m "feat: 实现新功能"
# 4. 推送到远程
git push -u origin feature/new-feature
# 5. 在 GitHub 创建 Pull Request
# 6. 合并后删除功能分支
git checkout main
git pull origin main
git branch -d feature/new-feature
4. .gitignore 配置示例
# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
*.egg-info/
dist/
build/
venv/
env/
ENV/
# IDE
.vscode/
.idea/
*.swp
*.swo
# 系统文件
.DS_Store
Thumbs.db
# 日志和临时文件
*.log
*.tmp
*.temp
# 环境变量
.env
.env.local
# 模型文件(如果很大,使用 Git LFS)
# *.pt
# *.h5
# *.pkl
📚 常用命令速查
基础命令
# 查看状态
git status
# 查看改动
git diff
git diff --staged
# 添加文件
git add .
git add <文件>
# 提交
git commit -m "提交信息"
# 推送
git push origin main
# 拉取
git pull origin main
分支操作
# 查看分支
git branch -a
# 创建分支
git checkout -b <分支名>
# 切换分支
git checkout <分支名>
# 合并分支
git merge <分支名>
# 删除分支
git branch -d <分支名>
历史查看
# 查看提交历史
git log
git log --oneline
git log --graph --oneline --all
# 查看特定文件的提交历史
git log <文件路径>
# 查看提交详情
git show <commit-hash>
撤销操作
# 撤销工作区修改
git checkout -- <文件>
# 撤销暂存区
git reset HEAD <文件>
# 撤销最后一次提交(保留修改)
git reset --soft HEAD~1
# 撤销最后一次提交(不保留修改)
git reset --hard HEAD~1
远程操作
# 查看远程仓库
git remote -v
# 添加远程仓库
git remote add origin <url>
# 修改远程地址
git remote set-url origin <new-url>
# 获取远程更新(不合并)
git fetch origin
# 拉取并合并
git pull origin main
📋 快速参考表
| 操作 | 命令 |
|---|---|
| 查看状态 | git status |
| 添加所有文件 | git add . |
| 提交 | git commit -m "信息" |
| 推送 | git push origin main |
| 拉取 | git pull origin main |
| 创建分支 | git checkout -b <分支名> |
| 切换分支 | git checkout <分支名> |
| 查看历史 | git log --oneline |
| 撤销修改 | git checkout -- <文件> |
💡 总结
掌握以下核心流程即可:
- 检查改动 →
git status - 添加文件 →
git add . - 提交更改 →
git commit -m "提交信息" - 推送到远程 →
git push origin main
遇到问题时:
- 先查看错误信息
- 使用
git status检查当前状态 - 参考本文的常见问题解决方案
- 谨慎使用
--force强制推送
提示: 建议将本文收藏,遇到问题时快速查阅。Git 操作需要多练习,熟能生巧!