技术经验
Git 团队协作远程操作完整指南
快速入门Git,进行团队协作。包括基础的Git操作,日常开发流程,如何通过SSH与远程仓库建立连接。
Git 团队协作远程操作完整指南(从0到1 · SSH 版)
适配内网 GitLab 、公网github场景:
一、创建本地仓库(完成本地首次版本提交)
适用于本地已有项目代码,从零纳入 Git 管理的场景。
- 初始化本地 Git 仓库 进入项目根目录,执行初始化,生成
.git版本管理目录:
cd 你的项目文件夹路径
git init
- 添加文件到暂存区
# 添加项目内所有文件
git add .
# 或只添加指定文件/文件夹
git add 文件名/文件夹名
建议提前配置
.gitignore文件,排除编译产物、日志、临时文件等无需版本管理的内容。
- 提交代码到本地仓库
git commit -m "feat: 新增小龙虾剥虾头视觉识别模块"
提交信息建议格式:
类型: 简短描述
feat:新增功能fix:修复问题docs:文档更新refactor:代码重构
- 如果你的电脑上首次使用 Git, 必须设置git用户名,否则提交代码会报错身份未知:
# 全局配置(所有仓库共用)
git config --global user.name "用户名"
git config --global user.email "你的邮箱"
只执行一次,后续所有项目不用重复设置。
二、与远程仓库建立联系
2.1 本地 SSH 密钥配置(仅首次本机配置)
Gitlab SSH密钥配置
GitHub SSH密钥配置教程
2.2 本地仓库关联远程仓库
把本地仓库和 GitLab /github 上的目标仓库绑定,只需执行一次。
- 执行关联命令
# 格式:git remote add <远程别名> <远程仓库SSH地址>
git remote add origin git@10.10.100.100:xiao_long_xia/crayfish-ii.git
origin:远程仓库的本地别名,业界约定俗成使用origin,可自定义- 后面的 SSH 地址:对应 远程git 仓库的
SSH克隆地址,不是HTTPS地址 - 关联时确保在本地Git仓库的目录下
- 验证关联结果
# remote -v :查看远程仓库地址
git remote -v
输出两行(分别对应拉取、推送地址),地址正确即关联成功:
origin git@10.10.100.100:xiao_long_xia/crayfish-ii.git (fetch)
origin git@10.10.100.100:xiao_long_xia/crayfish-ii.git (push)
补充:如果是直接从远程克隆仓库(
git clone 地址),会自动完成 origin 关联,无需手动执行git remote add。
三、日常开发常用流程
如果你是首次上传自己代码,代码与现有模块没有关联,略过1、2、3、节。 进行第四节中的代码推送
1. 开发前:同步远程主分支最新代码
每次开发前必须执行,避免基于旧代码开发导致后续大量合并冲突:
# 切换到主分支; switch 分支名:切换到指定分支
git switch feature/robot_bringup
# 拉取远程最新代码到本地;pull 用来拉取远程代码
git pull
2. 新建功能开发分支
基于最新的主分支,创建自己的开发分支:
# switch -c 新分支名 :创建并切换到新分支
git switch -c feature/你的新分支
3. 编码后:提交本地变更
# 查看修改了哪些文件,确认变更范围
git status
# 添加修改的文件到暂存区
git add 文件名
# 或添加全部修改文件,要先写.gitignore文件
git add .
# 提交到本地仓库,写清变更说明
git commit -m "fix: 修复触觉传感器数据解析异常"
4. 推送分支到远程仓库
- 首次推送该分支,建议加
-u绑定上游追踪关系,后续操作可简写:
git push -u origin main
- 绑定上游之后,该分支后续的推送/拉取可直接简写:
git push
git pull
5. 分支提交合并请求(MR / Merge Request)
推送成功后,终端会输出 GitLab 的 MR 创建直达链接,点击即可跳转创建;也可在网页端手动操作:
- 进入 GitLab 仓库页面 → 左侧
Merge Requests→New merge request - 源分支选择你的
feature/xxx功能分支,目标分支选择主分支feature/robot_bringup - 填写标题、改动说明、测试情况,指派代码评审人
- 提交 MR,等待评审
6. 代码评审与迭代
- 评审人提出修改意见:你在本地对应分支修改代码后,重复「提交 → 推送」步骤,更新会自动同步到同一个 MR
- 评审通过后:由仓库负责人执行合并,代码正式合入主分支
四、常用操作
1、分支命名规范
- 主分支:
feature/robot_bringup(受保护分支,禁止直接推送,必须走 MR 流程) - 功能分支:
feature/模块名_功能名,例如feature/peel_crafish - 修复分支:
fix/问题描述,例如fix/camera_frame_delay
2、处理代码冲突
当 git pull 或合并提示冲突时:
- 打开冲突文件,找到
<<<<<<<=======>>>>>>>标记的冲突区域 - 手动修改保留正确代码,删除所有冲突标记
- 执行
git add和git commit完成合并:
git add 冲突文件
git commit -m "merge: 解决代码合并冲突"
git push
3、常用值令汇总
1、仓库状态与提交记录
| 命令 | 作用 |
|---|---|
git status | 查看当前仓库状态 |
git log | 查看完整提交历史 |
git log --oneline | 简洁查看提交历史 |
git show | 查看最近一次提交的详细信息 |
git diff | 查看工作区与暂存区之间的差异 |
git diff --staged | 查看暂存区与最近一次提交之间的差异 |
2、远程仓库管理
这一部分主要用于 GitHub 和 GitLab 的远程同步。
| 命令 | 作用 |
|---|---|
git remote -v | 查看远程仓库 |
git remote add origin 地址 | 添加远程仓库 |
git remote set-url origin 地址 | 修改远程仓库地址 |
git remote remove origin | 删除远程仓库关联 |
git fetch | 获取远程更新,但不自动合并 |
git pull | 拉取远程更新并整合到当前分支 |
git push | 推送本地提交到远程仓库 |
git push origin 分支名 | 推送指定分支 |
git push -u origin 分支名 | 首次推送并建立上游追踪关系 |
git clone 地址 | 克隆远程仓库到本地 |
| 示例: |
# 获取远程仓库最新的分支和提交信息,但不会直接修改当前工作区
git fetch origin
# 获取并整合
git pull origin main
3、文件管理
这一部分非常重要,开发过程中经常会遇到误修改、误添加、误提交的情况。
| 命令 | 作用 |
|---|---|
git add 文件名 | 将文件添加到暂存区 |
git add . | 添加当前目录下的变更 |
git rm 文件名 | 删除文件并记录删除操作 |
git mv 原文件 新文件 | 移动或重命名文件 |
git rm --cached 文件名 | 停止跟踪文件,但保留本地文件 |
git restore 文件名 | 丢弃工作区指定文件的未暂存修改 |
git restore . | 丢弃当前目录下所有未暂存修改 |
git restore --staged 文件名 | 将文件从暂存区移回工作区但保留本地修改 |
git commit --amend | 修改最近一次提交 |
git reset --soft HEAD~1 | 撤销最近一次提交,保留暂存区和工作区内容 |
git reset HEAD~1 | 撤销最近一次提交,只保留工作区修改内容 |
git reset --hard HEAD~1 | 撤销最近一次提交,丢弃对应工作区和暂存区修改 |
git revert 提交ID | 通过新增一次反向提交来撤销指定提交 |
| 示例 |
# 如果你修改了 `main.cpp`,但是想恢复到上次提交的状态:
git restore main.cpp
# 如果你执行了 git add . 要取消暂存区的提交
git restore --staged .
# 如何你已经提交了一次代码,但是发现提交内容有问题。
git reset --soft HEAD~1
#如果代码已经推送到 GitHub,撤销提交,通常优先考虑
git revert HEAD
# 如果想取消 Git 跟踪,但保留本地文件
git rm --cached main.cpp
3、分支管理
| 命令 | 作用 |
|---|---|
git branch | 查看本地分支 |
git branch 分支名 | 创建分支,但不切换 |
git switch 分支名 | 切换分支 |
git switch -c 分支名 | 创建并切换到新分支 |
git branch -d 分支名 | 删除已经合并的本地分支 |
git branch -D 分支名 | 强制删除本地分支 |
git branch -m 新名称 | 重命名当前分支 |
git merge 分支名 | 将指定分支合并到当前分支 |
git merge --abort | 取消正在进行的合并 |
git rebase 分支名 | 将当前分支的提交重新应用到指定分支之上 |
git cherry-pick 提交ID | 将指定提交应用到当前分支 |
示例:
# 查看当前分支
git branch
# 删除本地功能分支
git branch -d feature/add-mpc
4、暂存工作区:git stash
这是一个很实用的功能。假设你正在开发一个功能,代码还没有写完,但是突然需要切换到另一个分支修复 Bug。此时可以暂时保存当前修改。
| 命令 | 作用 |
|---|---|
git stash | 暂存当前已跟踪文件的修改 |
git stash push -u | 暂存修改,包括未跟踪文件 |
git stash list | 查看暂存记录 |
git stash pop | 恢复最近一次暂存并删除对应记录 |
git stash apply | 恢复最近一次暂存,但保留记录 |
git stash drop | 删除最近一次暂存记录 |
git stash clear | 清空所有暂存记录 |
示例:
# 暂存当前修改
git stash push -u
# 切换分支
git switch main
# 修复其他问题并完成提交
# 切回原来的开发分支
git switch feature/add-mpc
# 恢复之前的修改
git stash pop
SSH 密钥配置流程
Gitlab SSH 密钥配置流程
- 先获取 gitlab 账号
- 登录账号 gitlab URL:
1、本地生成 SSH 公钥(Linux/macOS/WSL)
打开终端执行,替换为你 GitLab 绑定的邮箱:
# 生成ed25519加密密钥(推荐,安全性更高)
ssh-keygen -t ed25519 -C "你的gitlab邮箱"
- 提示输入文件路径:直接回车默认保存
~/.ssh/id_ed25519 - 密钥密码(可选):输入密码后每次使用 SSH 需解锁;不想输直接回车留空
- 生成完成后,读取公钥内容:
cat ~/.ssh/id_ed25519.pub
复制全部输出,格式以 ssh-ed25519 开头。 Windows 纯 cmd/PowerShell 同理,若无 ssh 工具先安装 OpenSSH 客户端。
2、GitLab 页面「添加 SSH 密钥」表单填写字段说明
- 说明(密钥内容框)
粘贴刚刚复制的完整公钥,开头必须是
ssh-ed25519 /ssh-rsa/ecdsa等合规前缀,不能粘贴私钥(不带.pub 的文件)。 - 标题
自定义标识,用于区分多台设备,示例:
本地台式机Ubuntu / MacBook开发本 / 服务器构建机仅展示用途,不影响连接。 - 使用类型(二选一)
- 仅认证 仅用于 git 拉取、推送、克隆仓库,日常开发选这个足够。
- 认证与签名 除代码推拉,还支持 Git 提交签名,满足代码审计、合规校验场景;企业内部规范、开源提交签名需求勾选此项。
- 有效期(可选,推荐设置)
- 不填:密钥永久有效,存在密钥泄露风险;
- 设置日期:到期后该密钥自动失效,无法再通过 SSH 访问仓库;
- 企业规范建议设置 90 天 / 180 天轮换,到期重新生成密钥上传。
3、测试联通性
终端执行
ssh -T git@10.10.100.100
出现欢迎提示即配置成功,之后即可使用 SSH 地址克隆仓库:
git clone git@10.10.100.100:分组/项目.git
GitHub SSH密钥配置教程
一、创建 GitHub 远程仓库
1.1 打开创建仓库页面
登录 GitHub:进入 Create a new repository页面。
1.2 填写仓库信息
| 填写字段 | 填写说明 |
|---|---|
| Owner | 你的 GitHub 账号 |
| Repository name | 仓库名称,建议与本地项目名称保持一致 |
| Description | 项目描述,可选 |
| Choose visibility | 仓库可见性Public或 Private |
| Add README | Off |
| Add .gitignore | No .gitignore |
| Add license | No license |
- Choose visibility:如果项目暂时不希望公开,建议选择
Private。如果准备公开发布开源项目,可以选择Public - 本教程的场景是本地仓库已经初始化,并且已经有本地提交,因此最后三个选项保持默认关闭。如果 GitHub 再创建一个 README 初始提交,就会形成两条独立的提交历史,首次推送可能出现冲突
- 如果本地仓库尚未初始化、没有提交,并且你希望由 GitHub帮你创建初始文件,则可以根据实际需要选择这些选项;但这不属于本教程当前场景。
1.3创建仓库
确认信息后,点击页面底部的 Create repository。
创建成功后,GitHub 会进入仓库页面,并显示 Quick Setup信息。后续需要使用其中的 SSH 地址。
二、本地 SSH 密钥配置
SSH 密钥用于验证当前电脑是否有权限访问 GitHub 仓库。配置完成后,使用 SSH 地址进行克隆、拉取和推送时,通常不需要每次输入 GitHub 账号密码。
2.1 检查本地是否已有 SSH 密钥
终端执行:
ls -la ~/.ssh/
如果有密钥,常见的密钥文件名如下:
id_ed25519
id_ed25519.pub
- 两个文件的区别:
id_ed25519私钥,保存在本地,用于身份认证 ,不可以上传到githubid_ed25519.pub公钥,用于提供给 GitHub - 文件名只是常见默认命名,并不是每台电脑都必须使用这个名称。
~/.ssh/目录中也可能存在其他名称的密钥文件。
2.2 情况 A:已经有可复用的 SSH 密钥
如果之前为 GitLab 或其他服务生成过 SSH密钥,可以直接复用,不需要重新生成。GitHub 和 GitLab 都支持 SSH密钥钥认证;同一公钥可以添加到不同平台的账号设置中。
查看公钥:
cat ~/.ssh/id_ed25519.pub
- 复制完整输出内容。输出通常以
ssh-ed25519开头。只能复制.pub公钥文件的内容。 - 如果想为 GitHub单独创建一对密钥,应使用新的文件名,避免覆盖已有密钥。
2.3 情况 B:本地没有 SSH 密钥,需要新建
终端执行:
# # 生成ed25519加密密钥(推荐,安全性更高)
ssh-keygen -t ed25519 -C "你的GitHub邮箱"
按照终端提示操作。当出现:
Enter file in which to save the key
直接按回车,默认保存到:
/home/你的用户名/.ssh/id_ed25519
接下来设置密钥密码(可选),不想设置可以直接回车两次。 生成完成后,查看公钥:
cat ~/.ssh/id_ed25519.pub
重要:如果终端提示目标文件已经存在,不要直接确认覆盖。 覆盖可能导致原有服务使用的密钥失效。可以取消本次操作,再使用单独的文件名,例如:
/home/你的用户名/.ssh/id_ed25519_github
如果使用了单独文件名,则相应查看:
cat ~/.ssh/id_ed25519_github.pub
2.4 将公钥添加到 GitHub
打开 GitHub SSH 密钥设置页面, 操作步骤:
- 点击 New SSH key。
Title:填写设备名称,例如Ubuntu 22.04 Desktop,方便区分不同设备。Key type:选择Authentication Key。Key:粘贴刚才复制的完整公钥内容。- 点击 Add SSH key。
注意:这里添加的是公钥,不是私钥。 Authentication Key 用于 SSH身份认证;不要因为本教程是 Git 推送配置,就误选用于提交签名的Signing Key。
2.5 测试 SSH 连接
在 Ubuntu 终端执行:
ssh -T git@github.com
第一次连接时,可能会出现主机指纹确认提示:
Are you sure you want to continue connecting (yes/no/[fingerprint])?
确认主机指纹与 GitHub 官方公布的 SSH 主机指纹一致后,输入:
yes
认证成功时,会看到类似提示:
Hi 用户名! You've successfully authenticated, but GitHub does not provide shell access.
这表示 SSH 身份认证成功。提示中的 does not provide shell access是正常信息,不代表认证失败