🚀 Git 使用说明手册(实习生版)

NOTE

本手册专为 Git 新手编写,按照真实工作流程排列章节,建议从头到尾阅读一遍后再开始工作。遇到问题可直接跳转对应章节查阅。


⚙️ 使用前必看:需根据公司情况修改的内容

IMPORTANT

以下是手册中所有需要根据公司实际情况替换的内容,使用前请逐项确认。

标识含义示例默认值需要改成
【主分支名】公司主分支名称,各公司不同main可能是 masterdeveloptrunk 等,请问清楚 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 域名

📋 目录


一、第一次使用?先做初始化配置

IMPORTANT

每台新电脑或新账号,只需配置一次。这是你的”身份证”,提交记录会显示这些信息。

1.1 安装 Git

前往官网下载安装:https://git-scm.com/downloads

安装完成后,打开终端(Windows 用 Git BashPowerShell),输入:

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 main

1.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 main

2.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.js

3.3 开发完成:暂存修改

# 添加某个文件到暂存区
# 【需修改】src/login.js 替换为你实际修改的文件路径
git add src/login.js
 
# 添加某个目录下的所有文件
git add src/
 
# 添加所有修改的文件(最常用)
git add .
 
# 查看暂存区状态(确认添加了哪些文件)
git status

NOTE

暂存区就像”待寄快递箱”,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 push

4.2 推送后:创建合并请求(MR / PR)

推送成功后,去公司代码平台网页上:

  1. 点击 “Create Merge Request”(GitLab)或 “New Pull Request”(GitHub)
  2. 填写标题和描述,说明做了什么改动
  3. 指定 代码审阅人(你的 Leader 或同事)
  4. 等待审核通过后合并 ✅

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 push

TIP

已经 push 的提交,优先用 git revert,它是”安全撤销”,会新建一条反向提交,不影响其他人的历史。


六、权限问题怎么处理?

6.1 常见权限报错及解决

报错 1:403 ForbiddenPermission denied

remote: HTTP Basic: Access denied
fatal: Authentication failed

解决方法:

  1. 检查账号是否有该仓库的访问权限(找 Leader 或管理员添加)
  2. HTTPS 方式:重新输入用户名和密码
  3. SSH 方式:检查公钥是否正确上传到平台

报错 2:You are not allowed to push codeprotected 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 e4f5g6h

TIP

git reflog 是你的”时光机”,记录了所有 HEAD 的变动历史,只要 commit 过,就能找回


7.3 误删了分支

# 查看 reflog 找回分支最后一次提交的 ID
git reflog
 
# 根据 ID 重建分支
# 【需修改】"被删除的分支名" 和 "a1b2c3d" 替换为你的实际值
git checkout -b 被删除的分支名 a1b2c3d

7.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 --all

WARNING

执行后所有团队成员需要重新 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 | 作者:团队内部整理