以
rl_training项目为例,讲解 Git 核心操作流程
任务一:本地上传到 GitHub(含分支管理)
1.1 首次上传项目
Step 1: 在 GitHub 创建空仓库
- 登录 github.com
- 点击右上角
+→New repository - 输入仓库名(如
rl_training) - ⚠️ 不要勾选任何初始化选项(保持仓库为空)
- 点击
Create repository
Step 2: 本地初始化并推送
powershell
# 进入项目目录
cd F:\codespace\Lite3\rl_training
# 初始化 Git 仓库
git init
# 添加所有文件
git add .
# 首次提交
git commit -m "Initial commit"
# 设置主分支名为 main
git branch -M main
# 关联远程仓库
git remote add origin git@github.com:你的用户名/rl_training.git
# 推送到 GitHub
git push -u origin main
1.2 分支管理
查看分支
powershell
# 查看本地分支(*号表示当前分支)
git branch
# 查看所有分支(包括远程)
git branch -a
创建分支
powershell
# 创建新分支
git branch 分支名
# 创建并切换到新分支(推荐)
git checkout -b 分支名
# 示例:创建 biped 分支
git checkout -b biped
切换分支
powershell
# 切换到指定分支
git checkout 分支名
# 示例
git checkout main
git checkout biped
推送分支到远程
powershell
# 首次推送新分支(建立追踪关系)
git push -u origin 分支名
# 后续推送
git push
删除分支
powershell
# 删除本地分支(需先切换到其他分支)
git branch -d 分支名
# 强制删除(未合并的分支)
git branch -D 分支名
# 删除远程分支
git push origin --delete 分支名
1.3 日常更新代码
powershell
# 1. 确认当前分支
git branch
# 2. 查看修改状态
git status
# 3. 添加修改
git add .
# 4. 提交
git commit -m "描述本次修改内容"
# 5. 推送
git push
1.4 完整工作流示例
powershell
# 场景:在 biped 分支上开发新功能
# 1. 切换到 biped 分支
git checkout biped
# 2. 修改代码后,查看状态
git status
# 3. 添加所有修改
git add .
# 4. 提交
git commit -m "添加双足步态控制功能"
# 5. 推送到远程
git push
任务二:从远程分支拉取代码(强制覆盖本地)
适用场景:在另一台电脑(如训练服务器)上,需要获取 GitHub 上某个分支的最新代码,本地重名文件直接被远程版本覆盖。
2.1 方法一:全新克隆(推荐首次使用)
powershell
# 克隆仓库
git clone git@github.com:你的用户名/rl_training.git
# 进入目录
cd rl_training
# 切换到目标分支
git checkout 分支名
2.2 方法二:fetch + reset(强制覆盖本地)⭐
⚠️ 警告:此操作会丢弃本地所有未提交的修改!
powershell
# 1. 获取远程最新信息
git fetch origin
# 2. 切换到目标分支(如果不在该分支)
git checkout 分支名
# 3. 强制重置本地分支到远程版本(覆盖所有本地文件)
git reset --hard origin/分支名
实际示例
powershell
# 场景:把本地 biped 分支强制同步为远程最新版本
git fetch origin
git checkout biped
git reset --hard origin/biped
2.3 方法三:清理未跟踪文件
如果需要同时删除本地多余的文件(远程没有的文件):
powershell
# fetch + reset 后,清理未跟踪的文件和目录
git fetch origin
git checkout 分支名
git reset --hard origin/分支名
git clean -fd
| 参数 | 说明 |
|---|---|
-f |
强制删除 |
-d |
包括目录 |
-n |
预览(不实际删除,先看看会删什么) |
2.4 命令对比
| 命令 | 作用 | 本地修改 |
|---|---|---|
git pull |
拉取并合并 | 保留,可能产生冲突 |
git fetch + git reset --hard |
强制同步 | 丢弃,完全覆盖 |
git clone |
全新克隆 | 不适用(新目录) |
2.5 完整工作流示例
powershell
# 场景:服务器上同步 GitHub 的 biped 分支最新代码
# 1. 进入项目目录
cd ~/rl_training
# 2. 获取远程更新
git fetch origin
# 3. 查看当前分支
git branch
# 4. 切换到 biped(如果不在)
git checkout biped
# 5. 强制覆盖本地(重名文件会被替换)
git reset --hard origin/biped
# 6. (可选)清理远程没有的多余文件
git clean -fd
# 7. 确认状态
git status
# 输出应该是:nothing to commit, working tree clean
环境准备
安装 Git
Windows:
powershell
winget install Git.Git
# 或下载安装: https://git-scm.com/download/win
Linux (Ubuntu):
bash
sudo apt update && sudo apt install git
配置用户信息
bash
git config --global user.name "你的用户名"
git config --global user.email "你的邮箱@example.com"
SSH 密钥配置(推荐)
powershell
# 1. 生成密钥
ssh-keygen -t ed25519 -C "你的邮箱@example.com"
# 2. 查看公钥
cat ~/.ssh/id_ed25519.pub
# 3. 将公钥添加到 GitHub
# Settings → SSH and GPG keys → New SSH key
# 4. 测试连接
ssh -T git@github.com
注意:每台电脑/服务器都需要单独生成密钥并添加到 GitHub。
常见问题
Q1: 推送被拒绝 (rejected)
! [rejected] main -> main (fetch first)
原因:远程有更新,本地落后了。
解决:
powershell
# 方法1:拉取合并后再推送
git pull origin main
git push
# 方法2:强制推送(会覆盖远程,谨慎!)
git push -f
Q2: 如何查看远程分支
powershell
# 更新远程分支信息
git fetch origin
# 查看所有远程分支
git branch -r
Q3: 切换分支时提示有未提交的修改
powershell
# 方法1:提交修改
git add .
git commit -m "保存当前修改"
# 方法2:暂存修改(稍后恢复)
git stash
git checkout 其他分支
# 回来后恢复
git stash pop
# 方法3:丢弃修改
git checkout -- .
Q4: 如何撤销最近一次提交
powershell
# 撤销提交,保留修改
git reset --soft HEAD~1
# 撤销提交,丢弃修改
git reset --hard HEAD~1
速查表
| 操作 | 命令 |
|---|---|
| 初始化仓库 | git init |
| 添加文件 | git add . |
| 提交 | git commit -m "说明" |
| 推送 | git push |
| 拉取 | git pull |
| 查看分支 | git branch |
| 创建并切换分支 | git checkout -b 分支名 |
| 切换分支 | git checkout 分支名 |
| 获取远程更新 | git fetch origin |
| 强制同步远程 | git reset --hard origin/分支名 |
| 查看状态 | git status |
| 查看历史 | git log --oneline |