目录

Git 协作入门:核心指令与主流工具速学指南

# Git 协作入门:核心指令与主流工具速学指南 v1.0

# 概述

本篇文章属于速学指南,目标是使得读者能够尽快的拥有 Git 协作的基本技能。通过本篇文章,读者将能够掌握 Git 的基本操作,了解 Git 的协作流程,以及如何使用主流的 Git 工具进行协作。如需要深入的了解 Git 命令,可以参考官方文档或其他进阶教程。

文章由以下几部分组成,可根据自身需要自行跳转到相应章节浏览:

  • Git 基础配置与命令速览
  • Git 团队协作标准流程
  • 主流 Git 工具操作指南
  • 典型 Git 问题诊断与解决方案 本文操作系统以 Windows 系统为例,Linux/Mac 同理。

# Git 基础配置与命令速览

# Git 安装和对接 GitHub 和 Gitee 全流程

  1. 下载并安装 Git:访问 Git 官网 (opens new window) 下载适合自己操作系统的 Git 安装包,按照提示下一步即可完成安装。

  2. 配置 Git 用户信息:在 Git 自带的 Git Bash 终端中输入以下命令,将您的姓名和邮箱地址设置为 Git 用户信息。

    git config --global user.name "Your Name"
    git config --global user.email "your.email@example.com"
    
    1
    2
  3. 生成 SSH 密钥(同时支持 GitHub 与 Gitee)

    ssh-keygen -t rsa -b 4096 -C "your.email@example.com"
    
    1
  4. 将生成的 SSH 密钥添加到 GitHub 或 Gitee 的账户中,以便后续使用 SSH 协议进行 Git 操作。

    cat ~/.ssh/id_rsa.pub    # 公钥
    
    1
  5. 将生成的 SSH 密钥添加到 GitHub 或 Gitee 的账户中,以便后续使用 SSH 协议进行 Git 操作。 Gitee公钥添加位置:主页 - 设置 - SSH 公钥 - 添加公钥 GitHub公钥添加位置:主页 - Settings - SSH and GPG keys - SSH keys - New SSH key

# Git 核心概念

  • 代码状态区域:工作区是编辑代码的地方,暂存区暂存准备提交的修改,版本库保存永久提交历史。工作区 → 暂存区 → 版本库
  • 提交(Commit):Git 的原子快照,每个提交有唯一哈希值,包含完整项目状态、作者信息和提交说明。
  • 分支(Branch):指向提交的轻量级指针,允许并行开发互不干扰,HEAD 指针指向当前分支。
  • 合并(Merge):将两个分支的修改整合,线性时快进合并,分叉时创建新的合并提交。
  • 变基(Rebase):将提交重新应用到另一分支,使历史更线性整洁,但不要对已推送的提交使用。
  • 远程仓库:服务器上的仓库副本,origin 是默认远程别名,是团队共享和协作代码的基础。
  • 克隆(Clone):复制远程仓库到本地,包含完整历史并自动设置 origin 指向源仓库。
  • 拉取(Pull):从远程获取最新代码并合并到当前分支,等同于 fetch + merge 或 fetch + rebase。
  • 推送(Push):将本地提交上传到远程仓库,需要是快进关系否则需谨慎强制推送。
  • 贮藏(Stash):临时保存未提交的修改清空工作区,便于切换分支或拉取代码后恢复继续工作。
  • 合并冲突:两人修改同一处代码时 Git 无法自动决定保留哪个版本,需手动编辑解决。
  • 忽略文件(.gitignore):指定编译产物、依赖目录等不应被 Git 跟踪的文件,支持通配符模式匹配。

# Git 基础命令

命令 作用 示例
初始化与克隆
git init 初始化新仓库 git init
git clone [URL] 克隆远程仓库到本地 git clone git@github.com:user/repo.git
提交与推送
git add . 将所有修改加入暂存区 git add .
git add [文件名] 将指定文件加入暂存区 git add src/App.java
git commit -m "消息" 提交暂存区的修改 git commit -m "fix: 修复登录bug"
git commit --amend 修改最后一次提交 git commit --amend --no-edit
git push 推送到远程仓库 git push
git push -u origin [分支] 推送并设置上游分支 git push -u origin feature-login
git pull 拉取并合并远程更新 git pull
git pull --rebase 以 rebase 方式拉取 git pull --rebase
分支操作
git branch 查看本地分支 git branch
git branch [名称] 创建新分支 git branch feature-test
git checkout [分支名] 切换分支 git checkout develop
git checkout -b [名称] 创建并切换到新分支 git checkout -b feature-api
git merge [分支名] 合并分支到当前分支 git merge feature-login
git branch -d [分支名] 删除已合并的分支 git branch -d feature-test
git branch -D [分支名] 强制删除分支 git branch -D test-branch
查看状态与历史
git status 查看工作区状态 git status
git log 查看提交历史 git log
git log --oneline 单行显示提交历史 git log --oneline -10
git log --graph 图形化显示分支历史 git log --graph --all
git diff 查看工作区与暂存区差异 git diff
git diff [分支名] 查看与指定分支的差异 git diff develop
常用辅助
git remote -v 查看远程仓库地址 git remote -v
git fetch 获取远程更新但不合并 git fetch
git fetch origin [分支] 获取指定远程分支 git fetch origin develop
git stash 暂存当前工作区修改 git stash
git stash pop 恢复暂存的修改 git stash pop
git reset HEAD [文件] 取消暂存区文件 git reset HEAD README.md
git checkout -- [文件] 撤销工作区文件修改 git checkout -- config.json

# Git 团队协作标准流程

# 协作流程

协作流程为:从主分支拉取最新代码后创建功能分支,在功能分支上进行开发和频繁提交,开发完成后推送代码并提交 Pull Request,经团队 Code Review 通过后合并到主分支,最后删除功能分支。

具体步骤如下:

  • 拉取最新代码:开始新任务前确保本地代码最新,图形化工具中点击「拉取」或「更新」按钮同步主分支更新
  • 创建新分支:基于主分支创建新分支用于开发,创建分支不影响主分支,所有修改在新分支上进行,起一个能说明用途的名字
  • 提交代码:完成一部分功能或修复问题后及时提交,保存工作进度,建议频繁提交而非一次性提交大量修改,每次提交附清晰的说明
  • 推送到远程:提交到本地后推送到远程仓库,备份工作进度避免丢失,让团队成员看到进度更新
  • 同步主分支更新:开发期间主分支有新更新时同步到分支,避免合并时产生大量冲突
  • 提交 Pull Request:功能开发完成测试通过后提交 PR,请求团队审查代码并同意合并到主分支,说明改动内容、解决的问题和测试说明
  • Code Review:团队成员查看 PR 代码,提出问题和改进建议,检查代码逻辑、Bug、风格一致性、冗余代码等
  • 处理反馈:根据 Review 意见修改代码,再次推送更新,直到团队满意
  • 合并代码:审查通过后选择合并方式(直接合并保留完整历史,压缩合并简化历史),将分支合并到主分支
  • 删除分支:合并完成后删除功能分支,保持分支列表整洁

# 冲突解决

冲突产生的原理

Git 在对比代码时,如果发现两个人修改了同一文件的同一行或多行相邻代码,Git 无法自动判断应该保留哪个版本,就会产生冲突。这不是 Git 的问题,而是语义层面的选择问题——需要团队成员根据业务逻辑判断哪个版本才是正确的。

冲突不是故障,而是协作过程的正常组成部分,就像团队讨论时需要达成一致意见一样。

图形化工具解决冲突

现代 Git 图形化工具都提供了可视化的冲突解决界面,核心原理都相同:

  1. 左右分屏对比:左侧显示当前分支的代码,右侧显示合并进来的代码,差异部分高亮显示
  2. 逐个决策冲突:每个冲突节点都可以单独处理,选择「接受左侧」、「接受右侧」或「手动合并」
  3. 实时预览:选择后立即显示合并结果,可以反复调整直到满意
  4. 一键完成:所有冲突处理完毕后,点击「解决冲突」或「继续合并」按钮即可

这个过程在所有主流工具中都非常直观,不需要理解 Git 的底层标记符号,也不用手动编辑文件。

如何避免冲突

  • 开始开发前先拉取最新代码
  • 开发过程中定期同步主分支更新
  • 与团队成员沟通开发计划,避免重复修改同一文件
  • 将大功能拆分成多个小的提交

# 主流 Git 工具操作指南

本章节将介绍三种最常用的 Git 图形化工具的操作方法,帮助您快速上手团队协作。每种工具都有其特点和优势,您可以根据自己的使用习惯选择合适的工具。

# GitHub Desktop

工具介绍与下载

GitHub Desktop 是 GitHub 官方开发的桌面客户端,界面简洁、操作直观,非常适合 Git 初学者。支持 Windows 和 macOS 系统。

基础界面说明

打开 GitHub Desktop 后,主界面分为三个主要区域:

  • 左侧栏:显示当前仓库列表和分支列表
  • 中间区域:显示文件变更列表和差异对比
  • 右下角:提交信息输入区域

克隆仓库

  1. 点击菜单栏 FileClone repository
  2. 在弹出窗口中选择以下方式之一:
    • GitHub.com (opens new window):显示您 GitHub 账户中的所有仓库,直接选择即可
    • URL:输入仓库的 Git 地址(支持 HTTPS 或 SSH)
  3. 选择本地保存路径
  4. 点击 Clone 按钮开始克隆

创建分支与提交

创建新分支:

  1. 点击顶部的当前分支名称(默认为 mainmaster
  2. 在下拉菜单中点击 New Branch
  3. 输入分支名称,如 feature-login
  4. 点击 Create Branch 完成创建

提交代码:

  1. 修改代码后,GitHub Desktop 会自动检测变更
  2. 在左侧勾选要提交的文件(默认全选)
  3. 在右下角输入提交信息:
    • Summary:简短描述(必填)
    • Description:详细说明(可选)
  4. 点击 Commit to [分支名] 按钮完成提交

推送与拉取

推送到远程:

  • 提交后,顶部会显示 Push origin 按钮
  • 点击该按钮将本地提交推送到远程仓库

拉取远程更新:

  • 顶部显示 Fetch origin 时,点击获取远程更新
  • 如果有新的提交,按钮会变为 Pull origin,点击合并到本地

合并与冲突解决

合并分支:

  1. 切换到目标分支(如 main
  2. 点击菜单 BranchMerge into current branch
  3. 选择要合并的分支
  4. 点击 Merge 按钮

解决冲突:

  1. 合并时如果出现冲突,GitHub Desktop 会提示有冲突文件
  2. 点击冲突文件右侧的 Open in [编辑器] 按钮
  3. 在编辑器中手动解决冲突(删除冲突标记,保留需要的代码)
  4. 保存文件后返回 GitHub Desktop
  5. 点击 Continue merge 完成合并

# VSCode Git 集成

VSCode Git 功能概览

Visual Studio Code 内置了强大的 Git 支持,无需安装额外插件即可完成大部分 Git 操作。对于前端开发者和使用 VSCode 的开发者来说,这是最便捷的选择。

前提条件:

  • 已安装 Git
  • 已安装 VSCode
  • VSCode 会自动检测系统中的 Git

源代码管理面板使用

打开源代码管理面板:

  • 点击左侧活动栏的 源代码管理图标(分支图标)
  • 或使用快捷键:Ctrl + Shift + G(Windows/Linux)或 Cmd + Shift + G(macOS)

面板功能:

  • CHANGES:显示已修改但未暂存的文件
  • STAGED CHANGES:显示已暂存的文件
  • SOURCE CONTROL:显示提交历史和分支信息

克隆仓库

  1. F1Ctrl+Shift+P 打开命令面板
  2. 输入 Git: Clone 并选择
  3. 输入仓库 URL
  4. 选择本地保存位置
  5. 克隆完成后选择 Open 打开项目

提交与推送

暂存文件:

  • 在源代码管理面板中,点击文件右侧的 + 图标暂存单个文件
  • 点击 CHANGES 右侧的 + 图标暂存所有文件

提交代码:

  1. 在源代码管理面板顶部的输入框中输入提交信息
  2. 点击 (对勾)图标提交
  3. 或使用快捷键:Ctrl + Enter(Windows/Linux)或 Cmd + Enter(macOS)

推送到远程:

  • 提交后,点击状态栏左下角的 图标推送
  • 或点击源代码管理面板顶部的 ...Push

拉取远程更新:

  • 点击状态栏左下角的 图标拉取
  • 或点击源代码管理面板顶部的 ...Pull

分支切换与创建

查看和切换分支:

  1. 点击状态栏左下角的分支名称
  2. 在弹出的列表中选择要切换的分支

创建新分支:

  1. 点击状态栏左下角的分支名称
  2. 选择 Create new branch...
  3. 输入分支名称并按 Enter
  4. 新分支会自动基于当前分支创建并切换

或使用命令面板:

  1. F1 打开命令面板
  2. 输入 Git: Create Branch 并选择
  3. 输入分支名称

冲突解决

当拉取或合并代码时出现冲突:

  1. VSCode 会自动标记冲突文件,在源代码管理面板中显示 ! 标记
  2. 打开冲突文件,VSCode 会高亮显示冲突区域
  3. 冲突区域会显示四个操作按钮:
    • Accept Current Change:保留当前分支的修改
    • Accept Incoming Change:保留合并进来的修改
    • Accept Both Changes:同时保留两者
    • Compare Changes:对比差异
  4. 选择合适的操作或手动编辑代码
  5. 解决所有冲突后,暂存文件并提交

常用插件推荐

GitLens —— Git 增强插件(强烈推荐)

安装方式:

  1. 点击左侧活动栏的扩展图标
  2. 搜索 GitLens
  3. 点击 Install 安装

主要功能:

  • 行内 Git 信息:在每行代码末尾显示最后修改者和时间
  • 文件历史:可视化查看文件的完整修改历史
  • 代码作者追踪:快速定位某行代码的作者和提交信息
  • 分支对比:可视化对比不同分支的差异
  • 提交图表:图形化显示提交历史和分支关系

使用技巧:

  • 点击代码行末尾的 Git 信息可查看详细的提交详情
  • 在源代码管理面板中查看 FILE HISTORY 了解文件演变
  • 使用 Git: Show Commit Graph 命令查看可视化提交图

# IDEA 系列 Git 集成

IDEA/WebStorm/PyCharm Git 功能

JetBrains 系列 IDE(IntelliJ IDEA、WebStorm、PyCharm、GoLand 等)都内置了功能强大的 Git 工具,操作方式基本一致。本节以 IDEA 为例,其他 IDE 操作完全相同。

前提条件:

  • 已安装 Git
  • IDE 会在首次使用时自动配置 Git 路径
  • 如需手动配置:SettingsVersion ControlGit

克隆仓库

  1. 启动 IDEA,在欢迎界面选择 Get from VCS
  2. 或在已打开项目中选择 GitClone
  3. 在弹出窗口中:
    • URL:输入仓库地址
    • Directory:选择本地保存路径
  4. 点击 Clone 开始克隆
  5. 克隆完成后 IDEA 会自动打开项目

VCS 操作面板

IDEA 的 Git 功能主要分布在以下位置:

  • 顶部菜单Git 菜单包含所有 Git 操作
  • 工具栏:快捷操作按钮(更新、提交、推送等)
  • 左侧项目树:文件颜色标记修改状态
    • 蓝色:文件已修改
    • 绿色:新增文件
    • 红色:文件未加入版本控制
    • 灰色:文件被忽略
  • 底部工具窗口Git 窗口显示提交历史和分支

提交与推送

提交代码:

  1. 点击工具栏的 图标或使用快捷键 Ctrl + K(Windows/Linux)或 Cmd + K(macOS)
  2. 在提交窗口中:
    • 勾选要提交的文件
    • Commit Message 中输入提交信息
    • 可选:点击右侧的 Commit Checks 查看代码检查结果
  3. 点击 Commit 按钮(仅提交到本地)
  4. 或点击 Commit and Push...(提交并立即推送)

推送到远程:

  • 点击工具栏的 图标或使用快捷键 Ctrl + Shift + K(Windows/Linux)或 Cmd + Shift + K(macOS)
  • 在弹出窗口中确认要推送的提交
  • 点击 Push 按钮

拉取远程更新:

  • 点击工具栏的 图标或使用快捷键 Ctrl + T(Windows/Linux)或 Cmd + T(macOS)
  • 在弹出窗口中选择更新方式:
    • Merge:合并远程更新
    • Rebase:变基方式更新
  • 点击 OK 执行更新

分支管理

查看和切换分支:

  1. 点击右下角的当前分支名称
  2. 在弹出的分支列表中:
    • Local Branches:本地分支
    • Remote Branches:远程分支
  3. 点击分支名称选择 Checkout 切换分支

创建新分支:

  1. 点击右下角的分支名称
  2. 选择 New Branch
  3. 输入分支名称
  4. 勾选 Checkout branch 自动切换到新分支
  5. 点击 Create 完成创建

合并分支:

  1. 切换到目标分支(如 main
  2. 点击右下角分支名称
  3. 选择要合并的分支,点击 Merge into Current
  4. 确认合并操作

删除分支:

  1. 点击右下角分支名称
  2. 找到要删除的分支,右键选择 Delete
  3. 确认删除操作

冲突解决

当拉取或合并代码时出现冲突:

  1. IDEA 会弹出 Conflicts 对话框,显示所有冲突文件
  2. 点击 Merge 按钮打开三方合并工具
  3. 三方合并界面说明:
    • 左侧:当前分支的代码(Your Version)
    • 中间:合并结果(Result)
    • 右侧:合并进来的代码(Server Version)
    • 底部:原始代码(Base Version)
  4. 操作方式:
    • 点击左右两侧的 >>X 图标选择接受或拒绝某个修改
    • 或在中间结果区域直接手动编辑代码
  5. 解决完所有冲突后点击 Apply 保存
  6. 返回提交窗口,提交解决冲突后的代码

Git 工具窗口使用

打开 Git 工具窗口:

  • 点击底部的 Git 标签
  • 或使用快捷键 Alt + 9(Windows/Linux)或 Cmd + 9(macOS)

Git 窗口功能:

Log 标签(提交历史):

  • 查看所有分支的提交历史
  • 图形化显示分支关系
  • 右键提交可执行:
    • Cherry-Pick:挑选提交
    • Revert Commit:撤销提交
    • Reset Current Branch to Here:重置分支到此提交
  • 双击提交查看详细修改内容

Console 标签(控制台):

  • 显示所有 Git 操作的命令行输出
  • 可直接输入 Git 命令执行

实用技巧:

  • 对比差异:右键文件选择 Compare with... 可对比不同版本
  • 文件历史:右键文件选择 GitShow History 查看文件的完整修改历史
  • 注释追踪:右键代码行选择 GitAnnotate 查看每行代码的最后修改者和时间
  • 本地历史:IDEA 独有功能,即使没有提交也会自动保存本地历史,右键Local History 查看

# 典型 Git 问题诊断与解决方案

本章节汇总了团队协作中最常遇到的 Git 问题及其解决方法。遇到问题时,先不要慌张,按照提示逐步操作即可。如果图形化工具无法解决,可以尝试使用命令行工具。

# 提交相关问题

问题 1:提交了错误的文件或信息

场景:刚刚提交后发现提交信息写错了,或者不小心提交了不该提交的文件。

解决方法(仅针对最后一次提交,且未推送到远程):

# 修改最后一次提交的信息(不改文件)
git commit --amend -m "正确的提交信息"

# 添加遗漏的文件到最后一次提交
git add forgotten-file.txt
git commit --amend --no-edit

# 从最后一次提交中移除某个文件
git reset HEAD^ -- unwanted-file.txt
git commit --amend --no-edit
1
2
3
4
5
6
7
8
9
10

注意:

  • --amend 会修改提交历史,只能用于未推送的提交
  • 如果已经推送到远程,不建议使用此方法

问题 2:想撤销最后一次提交

场景:提交后发现整个提交都有问题,想完全撤销。

解决方法:

# 撤销提交,保留文件修改(推荐)
git reset --soft HEAD^

# 撤销提交,文件修改保留在工作区
git reset --mixed HEAD^

# 撤销提交,完全删除修改(危险!)
git reset --hard HEAD^
1
2
3
4
5
6
7
8

三种模式对比:

  • --soft:撤销提交,修改回到暂存区
  • --mixed:撤销提交,修改回到工作区
  • --hard:撤销提交,完全丢弃修改

问题 3:想修改历史提交记录

场景:需要修改几个提交之前的某个提交。

解决方法(高级操作,谨慎使用):

# 交互式变基,修改最近 3 个提交
git rebase -i HEAD~3

# 在打开的编辑器中:
# pick → edit(修改该提交)
# pick → squash(合并到前一个提交)
# pick → drop(删除该提交)
1
2
3
4
5
6
7

注意:

  • 不要修改已推送到远程的提交
  • 修改历史会改变提交哈希值,影响其他协作者

# 分支相关问题

问题 4:误删了分支

场景:不小心删除了还需要的分支。

解决方法:

# 查看最近的操作记录
git reflog

# 找到删除前的提交哈希值(如 abc1234),恢复分支
git checkout -b recovered-branch abc1234
1
2
3
4
5

说明:

  • reflog 记录了所有 HEAD 的移动历史
  • 通常可以恢复最近 30 天内的操作

问题 5:切换分支时提示有未提交的修改

场景:想切换分支,但当前分支有未提交的修改,Git 不允许切换。

解决方法:

# 方法 1:暂存当前修改
git stash
git checkout other-branch
# 切换回来后恢复修改
git checkout original-branch
git stash pop

# 方法 2:强制切换(会丢失修改,慎用)
git checkout -f other-branch

# 方法 3:先提交修改
git add .
git commit -m "临时提交"
git checkout other-branch
1
2
3
4
5
6
7
8
9
10
11
12
13
14

推荐使用 stash 方法,最安全。

问题 6:分支合并错误,想撤销合并

场景:合并后发现合并错了分支,或者合并产生了问题。

解决方法(未推送到远程):

# 撤销最后一次合并
git reset --hard HEAD~1

# 或者使用 ORIG_HEAD(指向合并前的状态)
git reset --hard ORIG_HEAD
1
2
3
4
5

解决方法(已推送到远程):

# 创建一个反向提交来撤销合并
git revert -m 1 <merge-commit-hash>
1
2

# 远程仓库问题

问题 7:推送被拒绝(rejected)

场景:执行 git push 时提示 rejected,推送失败。

常见原因及解决方法:

原因 1:远程有新提交

# 先拉取远程更新,再推送
git pull
git push

# 或使用 rebase 方式(历史更整洁)
git pull --rebase
git push
1
2
3
4
5
6
7

原因 2:本地分支未关联远程分支

# 推送并设置上游分支
git push -u origin branch-name
1
2

原因 3:强制推送需要权限

# 确认无误后,强制推送(危险操作)
git push --force

# 更安全的强制推送(不会覆盖他人提交)
git push --force-with-lease
1
2
3
4
5

注意:除非明确知道在做什么,否则不要使用 --force

问题 8:远程仓库地址错误或需要修改

场景:克隆时使用了 HTTPS,想改成 SSH;或者仓库迁移了。

解决方法:

# 查看当前远程仓库地址
git remote -v

# 修改远程仓库地址
git remote set-url origin git@github.com:user/repo.git

# 添加新的远程仓库
git remote add upstream git@github.com:original/repo.git

# 删除远程仓库
git remote remove origin
1
2
3
4
5
6
7
8
9
10
11

问题 9:本地与远程分支不一致

场景:提示 Your branch is ahead/behind 或无法同步。

解决方法:

# 本地领先远程(本地有未推送的提交)
git push

# 本地落后远程(远程有未拉取的提交)
git pull

# 本地和远程完全分叉
git pull --rebase
# 或者
git fetch
git merge origin/main
1
2
3
4
5
6
7
8
9
10
11

# 冲突处理进阶

问题 10:复杂冲突不知如何解决

场景:冲突涉及多个文件和多处修改,不确定该保留哪个版本。

解决策略:

# 查看冲突文件列表
git status

# 查看冲突的详细差异
git diff

# 完全接受当前分支的版本
git checkout --ours conflicted-file.txt

# 完全接受合并进来的版本
git checkout --theirs conflicted-file.txt

# 如果实在无法解决,中止合并
git merge --abort
1
2
3
4
5
6
7
8
9
10
11
12
13
14

建议:

  • 一次只解决一个文件的冲突
  • 与代码作者沟通确认正确的版本
  • 使用图形化工具的三方对比功能

问题 11:中断合并后的恢复

场景:合并到一半出现问题,执行了 git merge --abort,想重新合并。

解决方法:

# 确保工作区干净
git status

# 重新执行合并
git merge branch-name

# 如果需要恢复到合并前的状态
git reset --hard ORIG_HEAD
1
2
3
4
5
6
7
8

问题 12:二进制文件冲突

场景:图片、PDF 等二进制文件产生冲突。

解决方法:

# 二进制文件无法合并,只能选择一个版本
# 保留当前分支的版本
git checkout --ours image.png

# 保留合并进来的版本
git checkout --theirs image.png

# 标记为已解决
git add image.png
1
2
3
4
5
6
7
8
9

建议:尽量避免多人同时修改二进制文件。

# 常见错误提示

问题 13:detached HEAD 状态

提示信息:You are in 'detached HEAD' state

含义:HEAD 指向了某个具体的提交,而不是分支。

解决方法:

# 如果不需要保留修改,直接切换到分支
git checkout main

# 如果需要保留修改,创建新分支
git checkout -b new-branch-name

# 或者将修改应用到现有分支
git checkout main
git merge <commit-hash>
1
2
3
4
5
6
7
8
9

问题 14:fatal: refusing to merge unrelated histories

场景:合并两个没有共同祖先的仓库。

解决方法:

# 允许合并不相关的历史
git pull origin main --allow-unrelated-histories
1
2

常见于:

  • 本地初始化仓库后连接远程仓库
  • 合并两个独立的项目

问题 15:Permission denied (publickey)

场景:使用 SSH 推送或拉取时提示权限错误。

解决方法:

# 检查 SSH 密钥是否存在
ls -al ~/.ssh

# 如果没有,生成新密钥
ssh-keygen -t rsa -b 4096 -C "your.email@example.com"

# 将公钥添加到 GitHub/Gitee
cat ~/.ssh/id_rsa.pub

# 测试 SSH 连接
ssh -T git@github.com
1
2
3
4
5
6
7
8
9
10
11

# 工作区与暂存区问题

问题 16:撤销工作区的修改

场景:修改了文件但还未暂存,想恢复到修改前的状态。

解决方法:

# 撤销单个文件的修改
git checkout -- filename.txt

# 撤销所有文件的修改
git checkout -- .

# 或使用新版本命令
git restore filename.txt
git restore .
1
2
3
4
5
6
7
8
9

问题 17:取消已暂存的文件

场景:执行了 git add 后想撤销暂存。

解决方法:

# 取消单个文件的暂存
git reset HEAD filename.txt

# 取消所有文件的暂存
git reset HEAD .

# 或使用新版本命令
git restore --staged filename.txt
git restore --staged .
1
2
3
4
5
6
7
8
9

问题 18:删除未跟踪的文件

场景:工作区有很多未跟踪的文件(编译产物等),想清理。

解决方法:

# 查看会删除哪些文件(预览)
git clean -n

# 删除未跟踪的文件
git clean -f

# 删除未跟踪的文件和目录
git clean -fd

# 删除未跟踪的文件、目录和被忽略的文件
git clean -fdx
1
2
3
4
5
6
7
8
9
10
11

注意:git clean 会永久删除文件,使用前请确认。

# 附录

# Git 最佳实践

分支命名规范

命名原则:

  • 使用小写字母和连字符
  • 简洁明了,能说明分支用途
  • 包含类型前缀和具体描述

代码提交频率建议

  • 小步快跑:完成一个小功能就提交,不要积累太多修改
  • 原子提交:每次提交只做一件事,便于回滚和代码审查
  • 有意义的提交:避免「临时保存」「测试」等无意义的提交信息
  • 推送前整理:可以使用 git rebase -i 整理本地提交后再推送

分支管理策略

Git Flow(适合版本发布明确的项目)

  • main:生产环境代码
  • develop:开发环境代码
  • feature/*:功能分支
  • release/*:发布分支
  • hotfix/*:热修复分支

# .gitignore 常用模板

.gitignore 文件用于指定哪些文件不应被 Git 跟踪。

通用模板

# 操作系统文件
.DS_Store
Thumbs.db

# 编辑器和 IDE
.vscode/
.idea/
*.swp
*.swo
*~

# 日志文件
*.log
logs/

# 临时文件
*.tmp
*.temp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

Java 项目

# 编译输出
target/
out/
*.class

# Maven
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup

# Gradle
.gradle/
build/

# IDE
.idea/
*.iml

# 日志
*.log
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

前端项目(React/Vue)

# 依赖
node_modules/

# 构建输出
dist/
build/
.next/
.nuxt/

# 缓存
.cache/
.parcel-cache/

# 环境变量
.env
.env.local
.env.*.local

# 测试
coverage/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

创建 .gitignore 文件:

# 在项目根目录创建
touch .gitignore

# 用文本编辑器去编辑文件添加规则
1
2
3
4

提示:可以访问 gitignore.io (opens new window) 在线生成适合您项目的 .gitignore 模板。

# 进阶学习资源

官方文档

推荐教程

实践平台

进阶话题

学完本指南后,可以继续深入学习:

  • Git Hooks:自动化脚本,在特定 Git 事件时触发
  • Git Submodules:在项目中包含其他 Git 仓库
  • Git LFS:大文件存储方案
  • CI/CD 集成:将 Git 与持续集成工具结合
  • 代码审查工具:Gerrit、Review Board 等

结语

恭喜您完成本篇 Git 协作速学指南!通过本文的学习,您应该已经掌握了:

✅ Git 的基本概念和核心命令

✅ 团队协作的标准流程

✅ 主流 Git 工具的使用方法

✅ 常见问题的诊断与解决方案

Git 是一个功能强大的工具,实践是最好的学习方式。建议您:

  1. 创建一个测试仓库,尝试本文介绍的各种操作
  2. 在实际项目中应用所学知识
  3. 遇到问题时查阅本文的问题诊断章节
  4. 持续学习进阶话题,提升 Git 使用技能

记住:犯错是学习的一部分,Git 的强大之处在于几乎所有操作都可以撤销。保持耐心,多加练习,很快就能熟练掌握 Git!祝各使用愉快!🎉

上次更新: 2026/01/28, 07:13:20
最近更新
01
从N阶汉诺塔理解循环和递归的区别
12-03
02
HTTP状态码速查与场景解析
08-26
03
为什么Java中的类名要和文件名相同
08-11
更多文章>