🚀 Git 使用说明手册(实习生版)
NOTE
本手册专为 Git 新手编写,按照真实工作流程排列章节,建议从头到尾阅读一遍后再开始工作。遇到问题可直接跳转对应章节查阅。
⚙️ 使用前必看:需根据公司情况修改的内容
IMPORTANT
以下是手册中所有需要根据公司实际情况替换的内容,使用前请逐项确认。
| 标识 | 含义 | 示例默认值 | 需要改成 |
|---|---|---|---|
【主分支名】 | 公司主分支名称,各公司不同 | main | 可能是 master、develop、trunk 等,请问清楚 Leader |
【你的名字】 | 你的真实姓名或公司账号名 | 张三 | 填写你自己的姓名 |
【你的邮箱】 | 公司分配的工作邮箱 | zhangsan@company.com | 填写你自己的公司邮箱 |
【仓库地址】 | 项目的 Git 仓库地址 | git@gitlab.company.com:team/project.git | 从公司 GitLab/GitHub 页面复制 |
【项目目录名】 | 克隆后的本地文件夹名 | project-name | 与克隆的项目名一致 |
【代理地址】 | 公司内网代理地址 | http://proxy.company.com:8080 | 询问公司 IT 部门 |
【平台域名】 | 公司代码托管平台地址 | gitlab.company.com | 公司实际使用的 GitLab/GitHub 域名 |
📋 目录
- 一、第一次使用?先做初始化配置
- 二、拉取项目代码(克隆 / 拉取)
- 三、日常开发流程(接需求 → 提交代码)
- 四、推送代码到远程仓库(Push)
- 五、提交错了怎么办?(撤销 / 修改)
- 六、权限问题怎么处理?
- 七、删错了怎么办?(救命!)
- 八、高危操作救急演练
- 九、常用命令速查表
一、第一次使用?先做初始化配置
IMPORTANT
每台新电脑或新账号,只需配置一次。这是你的”身份证”,提交记录会显示这些信息。
1.1 安装 Git
前往官网下载安装:https://git-scm.com/downloads
安装完成后,打开终端(Windows 用 Git Bash 或 PowerShell),输入:
git --version看到版本号(如 git version 2.43.0)说明安装成功 ✅
1.2 配置你的身份信息
# 【需修改】将"张三"替换为你的真实姓名或公司账号名
git config --global user.name "张三"
# 【需修改】将邮箱替换为你的公司邮箱
git config --global user.email "zhangsan@company.com"1.3 配置默认编辑器(可选,推荐)
# 使用 VS Code 作为默认编辑器
git config --global core.editor "code --wait"1.4 配置默认分支名
# 【需修改】将 main 替换为公司规定的主分支名(常见的有 main、master、develop 等)
# 不确定就问 Leader!
git config --global init.defaultBranch main1.5 查看当前配置
# 查看所有全局配置,确认姓名和邮箱填写正确
git config --global --list输出示例:
user.name=张三
user.email=zhangsan@company.com
1.6 配置 SSH 密钥(推荐,免密登录)
# 【需修改】将邮箱替换为你的公司邮箱
# 1. 生成 SSH 密钥对(一路回车即可)
ssh-keygen -t ed25519 -C "zhangsan@company.com"
# 2. 查看公钥内容(复制全部内容)
cat ~/.ssh/id_ed25519.pub
# 【需修改】第 3 步:将公钥粘贴到公司平台(GitLab/GitHub)的 SSH Keys 设置页面
# 公司平台地址请向 Leader 确认TIP
配置了 SSH 之后,clone 项目时选择 SSH 链接(
git@...)而不是 HTTPS 链接,以后 push 就不用每次输密码了。
二、拉取项目代码(克隆 / 拉取)
2.1 第一次获取项目(克隆)
# 【需修改】仓库地址从公司 GitLab/GitHub 页面上复制,不要照抄示例!
# SSH 方式(推荐,需已配置 SSH 密钥)
git clone git@gitlab.company.com:team/project-name.git
# HTTPS 方式(未配置 SSH 时使用,需要输入用户名密码)
git clone https://gitlab.company.com/team/project-name.git
# 【需修改】克隆后进入项目目录(目录名与仓库名一致)
cd project-name克隆完成后,你本地就有了完整的项目代码 🎉
2.2 已有项目,更新到最新代码(拉取)
WARNING
每次开始工作前,先拉取最新代码! 避免和同事代码冲突。
# 拉取当前分支的最新代码
git pull
# 或者明确指定远程和分支(更安全)
# 【需修改】main 替换为公司实际的主分支名
git pull origin main2.3 查看当前状态
# 查看仓库状态(随时可用,不会有副作用)
git status
# 查看所有分支(本地 + 远程)
git branch -a
# 查看提交历史(按 q 退出)
git log --oneline三、日常开发流程(接需求 → 提交代码)
TIP
推荐工作流:每个需求/功能 创建一个独立分支,完成后合并到主分支。
3.1 接到需求后:创建功能分支
# 【需修改】main 替换为公司实际的主分支名
# 先切换到主分支并拉取最新代码
git checkout main
git pull origin main
# 创建并切换到新分支(分支名建议用 feature/功能描述)
# 功能分支命名规范也请向 Leader 确认
git checkout -b feature/user-login
# 查看当前在哪个分支
git branch
# 带星号 * 的就是当前分支3.2 开发过程中:查看修改了什么
# 查看哪些文件有变动
git status
# 查看具体改了什么内容(红色=删除,绿色=新增)
git diff
# 查看某个文件的具体修改
# 【需修改】src/login.js 替换为你实际修改的文件路径
git diff src/login.js3.3 开发完成:暂存修改
# 添加某个文件到暂存区
# 【需修改】src/login.js 替换为你实际修改的文件路径
git add src/login.js
# 添加某个目录下的所有文件
git add src/
# 添加所有修改的文件(最常用)
git add .
# 查看暂存区状态(确认添加了哪些文件)
git statusNOTE
暂存区就像”待寄快递箱”,
git add是把东西放进箱子,git commit是把箱子发出去。
3.4 提交代码(Commit)
# 提交(-m 后面写提交信息,说清楚做了什么)
git commit -m "feat: 新增用户登录功能"
# 提交信息规范(公司常用,部分公司可能有自己的规范,请向 Leader 确认):
# feat: 新功能
# fix: 修复 Bug
# docs: 文档更新
# style: 代码格式调整(不影响逻辑)
# refactor: 代码重构
# test: 添加测试
# chore: 构建/工具等杂项提交信息示例:
feat: 新增用户登录功能
fix: 修复登录页面按钮点击无响应的问题
docs: 更新 README 中的部署说明
四、推送代码到远程仓库(Push)
4.1 推送当前分支
# 第一次推送新分支(-u 设置上游跟踪,之后可以直接 git push)
# 【需修改】feature/user-login 替换为你当前的分支名
git push -u origin feature/user-login
# 设置过上游后,之后直接用
git push4.2 推送后:创建合并请求(MR / PR)
推送成功后,去公司代码平台网页上:
- 点击 “Create Merge Request”(GitLab)或 “New Pull Request”(GitHub)
- 填写标题和描述,说明做了什么改动
- 指定 代码审阅人(你的 Leader 或同事)
- 等待审核通过后合并 ✅
NOTE
【需确认】 不同公司使用的平台不同(GitLab、GitHub、Gitee 等),提交 MR/PR 的入口也不同,请向 Leader 确认公司使用哪个平台及具体操作流程。
4.3 查看推送结果
# 查看远程仓库的地址
git remote -v
# 查看远程分支列表
git branch -r五、提交错了怎么办?(撤销 / 修改)
WARNING
操作前请先确认:代码是否已经 push 到远程? 未 push 和已 push 的处理方式不同!
5.1 【最安全】修改最后一次提交信息
# 只修改提交信息(代码内容不变)
git commit --amend -m "fix: 修复用户登录功能的空指针问题"
# 如果还想修改代码内容,先 git add 再执行
git add 修改的文件
git commit --amend --no-edit # --no-edit 表示不修改提交信息CAUTION
如果这次提交已经 push 了,
--amend之后需要用git push --force-with-lease,且必须提前告知团队成员,否则会影响其他人!
5.2 撤销暂存(git add 之后后悔了)
# 撤销某个文件的暂存(文件内容不变)
# 【需修改】src/login.js 替换为你要撤销的文件路径
git restore --staged src/login.js
# 撤销所有文件的暂存
git restore --staged .5.3 丢弃工作区的修改(改乱了,想恢复)
# 丢弃某个文件的所有未提交修改(⚠️ 不可恢复!)
# 【需修改】src/login.js 替换为你要恢复的文件路径
git restore src/login.js
# 丢弃所有未提交的修改
git restore .CAUTION
git restore丢弃的修改无法找回,执行前请确认!
5.4 撤销最近几次提交(未 push)
# 撤销最近 1 次提交,保留代码修改(代码回到暂存区)
git reset --soft HEAD~1
# 撤销最近 1 次提交,保留代码修改(代码回到工作区,需要重新 add)
git reset --mixed HEAD~1
# 撤销最近 1 次提交,丢弃代码修改(⚠️ 危险!代码彻底不见)
git reset --hard HEAD~1
# 撤销最近 3 次提交(将数字 1 改为你需要的数量即可)
git reset --soft HEAD~3三种模式对比:
| 命令 | 提交记录 | 暂存区 | 工作区代码 | 安全性 |
|---|---|---|---|---|
| —soft | 撤销 | 保留 | 保留 | ✅ 最安全 |
| —mixed | 撤销 | 清空 | 保留 | ⚠️ 较安全 |
| —hard | 撤销 | 清空 | 丢失 | ❌ 危险 |
5.5 撤销某次提交(已 push,推荐用 revert)
# 查看提交历史,找到要撤销的提交 ID
git log --oneline
# 输出示例:
# a1b2c3d feat: 新增用户登录
# e4f5g6h fix: 修复样式问题 ← 想撤销这次
# 使用 revert(会新增一条"撤销提交",不会删除历史)
# 【需修改】e4f5g6h 替换为你实际要撤销的提交 ID(从 git log 里查看)
git revert e4f5g6h
# 然后 push
git pushTIP
已经 push 的提交,优先用
git revert,它是”安全撤销”,会新建一条反向提交,不影响其他人的历史。
六、权限问题怎么处理?
6.1 常见权限报错及解决
报错 1:403 Forbidden 或 Permission denied
remote: HTTP Basic: Access denied
fatal: Authentication failed
✅ 解决方法:
- 检查账号是否有该仓库的访问权限(找 Leader 或管理员添加)
- HTTPS 方式:重新输入用户名和密码
- SSH 方式:检查公钥是否正确上传到平台
报错 2:You are not allowed to push code 或 protected branch
remote: GitLab: You are not allowed to push code to protected branches on this project.
✅ 解决方法:
- 主分支(
main/master或公司规定的分支名)通常是保护分支,不允许直接 push - 正确做法:在自己的功能分支开发,提交 MR/PR 让 Leader 合并
- 如确实需要直接 push,请找管理员临时调整分支保护规则
报错 3:SSH 连接失败
git@gitlab.company.com: Permission denied (publickey)
✅ 解决方法:
# 【需修改】gitlab.company.com 替换为公司实际的平台域名
# 检查 SSH 连接是否正常
ssh -T git@gitlab.company.com
# 检查本地 SSH 密钥是否存在
ls ~/.ssh/
# 重新生成并添加密钥(参考第一章 1.6 节)6.2 权限级别说明(GitLab 为例)
| 角色 | 能做什么 |
|---|---|
| Guest(访客) | 只能看 Issue |
| Reporter(报告者) | 可以查看代码、Clone |
| Developer(开发者) | 可以 Clone、Push 到非保护分支、提 MR |
| Maintainer(维护者) | 可以合并 MR、管理分支保护规则 |
| Owner(所有者) | 全部权限 |
NOTE
作为实习生,通常会给你 Developer 权限,遇到权限不够,直接找 Leader 申请。不同公司使用的平台(GitLab/GitHub/Gitee)权限角色名称可能略有不同。
七、删错了怎么办?(救命!)
IMPORTANT
Git 的强大之处在于:几乎所有操作都可以恢复,不要慌!
7.1 误删了文件(还没 commit)
# 恢复被删除的文件
# 【需修改】被删除的文件名.js 替换为你实际误删的文件路径
git restore 被删除的文件名.js
# 恢复所有被删除的文件
git restore .7.2 误用 —hard 丢失了代码
# 查看所有操作历史(包括被重置的提交)
git reflog
# 输出示例:
# a1b2c3d HEAD@{0}: reset: moving to HEAD~1
# e4f5g6h HEAD@{1}: commit: feat: 新增登录功能 ← 找到这里
# 恢复到该提交
# 【需修改】e4f5g6h 替换为你在 reflog 中找到的正确提交 ID
git reset --hard e4f5g6hTIP
git reflog是你的”时光机”,记录了所有 HEAD 的变动历史,只要 commit 过,就能找回!
7.3 误删了分支
# 查看 reflog 找回分支最后一次提交的 ID
git reflog
# 根据 ID 重建分支
# 【需修改】"被删除的分支名" 和 "a1b2c3d" 替换为你的实际值
git checkout -b 被删除的分支名 a1b2c3d7.4 误删了已 push 的代码(远程仓库)
CAUTION
这是高危操作,需要谨慎!先本地恢复,再 force push。
# 步骤 1:本地用 reflog 找回代码
git reflog
# 【需修改】<目标提交ID> 替换为 reflog 中找到的正确 ID
git reset --hard <目标提交ID>
# 步骤 2:强制推送到远程(⚠️ 必须提前通知团队!)
# 【需修改】"你的分支名" 替换为实际分支名
git push --force-with-lease origin 你的分支名7.5 Stash:临时保存未完成的工作
# 将当前未提交的修改暂时存起来
git stash
# 切换去修 Bug
# 【需修改】feature/user-login 替换为需要切换的目标分支名
git checkout feature/user-login
# 修完后切回来,恢复之前存起来的工作
git stash pop
# 查看所有 stash 列表
git stash list
# 恢复指定的 stash(stash@{0} 是最近一次,数字越大越旧)
git stash apply stash@{0}八、高危操作救急演练
CAUTION
以下操作均为高风险,执行前务必 三思 并 备份!
🚨 场景一:我把密码/密钥提交到了仓库里!
第一步:立刻失效那个密钥/密码(去对应平台重置,防止泄露)
第二步:从历史中彻底删除
# 使用 git filter-repo(需要先安装)
pip install git-filter-repo
# 从所有历史中删除敏感文件
# 【需修改】敏感文件.env 替换为你实际泄露的文件名
git filter-repo --path 敏感文件.env --invert-paths
# 强制推送
git push --force-with-lease --allWARNING
执行后所有团队成员需要重新 clone 仓库!必须提前告知!
🚨 场景二:我把主分支搞坏了,线上出问题了!
# 【需修改】main 替换为公司实际的主分支名
# 查找最近一次正常的提交ID
git log --oneline origin/main
# 回退到正常提交(本地操作)
# 【需修改】<正常提交的ID> 替换为从上面 log 中找到的正确 ID
git reset --hard <正常提交的ID>
# 强制推送(⚠️ 慎用,立刻通知 Leader!)
# 【需修改】main 替换为公司实际的主分支名
git push --force-with-lease origin main🚨 场景三:合并时出现大量冲突,不知道怎么解决
# 方法一:放弃合并,回到合并前状态(最安全)
git merge --abort
# 方法二:手动解决冲突
# 1. 打开冲突文件,找到 <<<<<<< HEAD 标记
# 2. 选择保留哪段代码,删除冲突标记(<<<<<<< ======= >>>>>>>)
# 3. git add 冲突文件
# 4. git commit
# 方法三:用某一方的版本直接覆盖
# 使用自己的版本
# 【需修改】冲突文件.js 替换为实际冲突文件路径
git checkout --ours 冲突文件.js
# 使用对方(远程)的版本
git checkout --theirs 冲突文件.js
git add 冲突文件.js🚨 场景四:不小心 git push —force 覆盖了别人的提交
# 让被覆盖的同事执行以下操作找回他的提交
git reflog
# 找到他最后正常的提交 ID,然后基于该 ID 重建分支
# 【需修改】<提交ID> 替换为 reflog 中找到的实际 ID
git checkout -b recovery-branch <提交ID>
# 你(操作失误者)再将恢复的内容合并回去
git merge recovery-branch🚨 场景五:克隆速度极慢或失败
# 浅克隆(只拉取最近1条提交历史,速度快)
# 【需修改】仓库地址替换为实际的仓库地址
git clone --depth 1 git@gitlab.company.com:team/project.git
# 配置代理(如果公司内网需要走代理才能访问代码平台)
# 【需修改】代理地址和端口请询问公司 IT 部门
git config --global http.proxy http://proxy.company.com:8080
git config --global https.proxy http://proxy.company.com:8080
# 取消代理
git config --global --unset http.proxy
git config --global --unset https.proxy九、常用命令速查表
📌 基础操作
| 命令 | 说明 | 需要修改? |
|---|---|---|
git init | 在当前目录初始化新仓库 | 否 |
git clone <url> | 克隆远程仓库 | 是:<url> 替换为实际仓库地址 |
git status | 查看工作区状态 | 否 |
git log --oneline | 查看简洁提交历史 | 否 |
git diff | 查看未暂存的修改 | 否 |
📌 分支操作
| 命令 | 说明 | 需要修改? |
|---|---|---|
git branch | 查看本地分支 | 否 |
git branch -a | 查看所有分支(含远程) | 否 |
git checkout -b <name> | 创建并切换分支 | 是:<name> 替换为实际分支名 |
git checkout <name> | 切换分支 | 是:<name> 替换为实际分支名 |
git branch -d <name> | 删除分支(已合并) | 是:<name> 替换为实际分支名 |
git branch -D <name> | 强制删除分支 | 是:<name> 替换为实际分支名 |
git merge <name> | 合并分支到当前分支 | 是:<name> 替换为实际分支名 |
📌 提交相关
| 命令 | 说明 | 需要修改? |
|---|---|---|
git add . | 暂存所有修改 | 否 |
git commit -m "msg" | 提交并附加信息 | 是:msg 替换为实际提交说明 |
git commit --amend | 修改最近一次提交 | 否 |
git push | 推送当前分支 | 否 |
git pull | 拉取并合并远程代码 | 否 |
git fetch | 只拉取不合并 | 否 |
📌 撤销操作
| 命令 | 说明 | 需要修改? |
|---|---|---|
git restore <file> | 丢弃工作区修改 | 是:<file> 替换为实际文件路径 |
git restore --staged <file> | 撤销暂存 | 是:<file> 替换为实际文件路径 |
git reset --soft HEAD~1 | 撤销提交,保留代码 | 否(数字可调整) |
git reset --hard HEAD~1 | 撤销提交,丢弃代码 | 否(数字可调整) |
git revert <id> | 安全撤销已推送的提交 | 是:<id> 替换为实际提交 ID |
git reflog | 查看所有历史操作(救命用) | 否 |
📌 临时保存
| 命令 | 说明 | 需要修改? |
|---|---|---|
git stash | 临时保存当前工作 | 否 |
git stash pop | 恢复并删除最近的存档 | 否 |
git stash list | 查看所有存档 | 否 |
git stash drop | 删除最近的存档 | 否 |
💡 写给新人的几条黄金法则
TIP
1. 每次开始工作前,先
git pull,保持和团队同步。
TIP
2. 每个功能/需求,新建一个分支,不要直接在主分支上改。
TIP
3. 提交信息要写清楚,方便自己和同事回顾。
TIP
4. 不确定的操作,先在测试分支上试,别在主分支搞。
TIP
5. 遇到问题不要慌,
git reflog几乎能救回一切!先冷静,再操作。
CAUTION
绝对禁止: 在没有告知团队的情况下,对任何公共分支执行
git push --force!这会直接覆盖别人的提交!
📅 文档创建日期:2026-08-02 | 适用工具:Git 2.x | 作者:团队内部整理