资讯动态

TortoiseGit 使用教程:从克隆到冲突解决,一条能跑通的最小路径

发布时间:2026/10/14 19:46:14 来源:尧图企业网站定制
简介这份资源是面向 Windows 平台 Git 初学者的 TortoiseGit 图文使用教程以 docx 文档形式呈现帮助不熟悉命令行的开发者通过图形化右键菜单完成版本控制操作。压缩包内共 1 个 docx 文件约 1.15MB内容围绕下载安装 Git 与 TortoiseGit、中文语言包配置、用户信息与凭证助手设置、SSH Key 生成与上传、克隆项目及提交推送等常用操作展开并配有界面截图辅助理解。教程还对比了 HTTPS 与 SSH 两种连接方式的差异说明文件状态角标含义并给出状态图标无法正常显示时的排查思路便于读者按图索骥完成环境搭建与日常协作。目前已有 2143 人学习适合需要快速上手 Git 图形化工具、减少命令行记忆负担的 Windows 用户参考。1. TortoiseGit 使用教程从克隆到冲突解决一条能跑通的最小路径很多人第一次接触 Git 是在命令行里敲git clone但真正到了团队协作阶段图形化客户端反而成了刚需。TortoiseGit 就是 Windows 平台上最常被提到的那一个——它把 Git 的提交、拉取、合并、冲突解决这些操作嵌进了资源管理器的右键菜单不需要记命令也不需要额外开终端。这个标题看起来像一份普通的使用说明但它背后真正要解决的问题是怎么在不依赖命令行的前提下把日常协作流程完整跑通并且知道每一步在 Git 层面到底发生了什么。这篇文章面向两类人一类是刚接手 Windows 开发环境、被命令行劝退的新手另一类是用了几年 TortoiseGit 但遇到冲突就慌、遇到配置就查的熟手。我会按「装好能跑 → 日常操作 → 分支与合并 → 冲突处理 → 避坑 → 进阶技巧」的顺序讲每一步都落到具体菜单、参数和命令上。你不需要先精通 Git但需要知道提交、分支、远程仓库这几个词大概是什么意思。2. 装完先别急着提交环境配置与首次克隆的完整链路2.1 TortoiseGit 和 Git for Windows 的关系以及为什么两个都要装TortoiseGit 本身不是 Git 的实现它只是一层图形化外壳底层调用的还是 Git for Windows 提供的git.exe。所以安装顺序必须是先装 Git for Windows再装 TortoiseGit。如果反过来TortoiseGit 在安装过程中会提示找不到 Git 可执行文件虽然可以手动指定路径但版本匹配容易出问题。常见做法是去 Git for Windows 官网下载 64 位安装包安装时一路默认即可唯一需要注意的是「Adjusting your PATH environment」这一步选第二项「Git from the command line and also from 3rd-party software」这样 TortoiseGit 才能直接调用到git。装完 Git 之后再装 TortoiseGit安装向导里会问你是用 OpenSSH 还是 PuTTY如果你没有特殊需求选 OpenSSH 就行和 Git for Windows 自带的一致。装完之后在桌面空白处右键如果能看到「Git Clone」「Git Create repository here」这些菜单项说明基本环境已经就绪。这时候别急着克隆先做一件事配置用户名和邮箱。TortoiseGit 的配置入口在右键菜单 → TortoiseGit → Settings → Git里面有一栏「Global」可以填 Name 和 Email。这两个值会写进~/.gitconfig每次提交都会带上。如果这里不填提交时 Git 会报错或者用机器名凑合后面推到远程仓库时提交记录会很难看。提示如果你之前用命令行配过git config --global user.nameTortoiseGit 会自动读取不需要重复填。2.2 用 Git Clone 拉取第一个仓库以及 URL 该怎么填克隆操作在右键菜单里叫「Git Clone…」点开之后会看到一个对话框核心字段只有三个URL、Directory、Branch。URL 支持两种协议HTTPS 和 SSH。HTTPS 的好处是不用配密钥输入账号密码就能拉缺点是每次推送都要输密码可以用凭据管理器缓存。SSH 需要提前把公钥传到远程仓库但配好之后一劳永逸。如果你只是拉一个公开仓库看看代码HTTPS 最省事如果是日常开发建议直接上 SSH。Directory 是本地存放路径TortoiseGit 会自动在末尾拼上仓库名。比如 URL 是gitexample.com:team/project.gitDirectory 填D:\work最终会拉到D:\work\project。Branch 留空表示拉默认分支通常是main或master。点 OK 之后会弹出一个进度窗口里面滚动的是实际的git clone输出。如果卡在「Receiving objects」很久通常是仓库太大或者网络慢不是配置问题。克隆完成后目标文件夹里会出现一个绿色对勾图标表示这是一个干净的 Git 工作区。# 等价于 TortoiseGit 克隆对话框里填的内容 git clone gitexample.com:team/project.git D:\work\project # 如果只想拉某个分支 git clone -b develop gitexample.com:team/project.git D:\work\project上面两行命令对应的是 TortoiseGit 背后实际执行的逻辑。-b参数指定分支不写就是默认分支。克隆完成后TortoiseGit 会在仓库根目录生成.git文件夹所有版本信息都在里面不要手动去改。2.3 全局忽略文件与换行符配置Windows 上最容易翻车的两个默认值Windows 和 Linux 的换行符不一样前者是CRLF后者是LF。如果团队里有人用 Windows 有人用 Linux不做配置的话每次提交都会因为换行符差异产生大量无意义的 diff。Git for Windows 在安装时其实已经问过你「Checkout Windows-style, commit Unix-style line endings」选这个选项之后core.autocrlf会被设成true检出时转成 CRLF提交时转回 LF。但 TortoiseGit 的 Settings 里还有一个「Git → Config」面板可以手动改这个值。我一般会确认一下core.autocrlf是不是true如果不是就手动加上。另外core.ignorecase在 Windows 上默认是true意味着 Git 不区分文件名大小写这在重命名文件时容易出问题知道有这回事就行。全局忽略文件也在这里配。Settings → Git → Global → Edit global .gitignore可以加一些 Windows 特有的垃圾文件比如Thumbs.db、Desktop.ini、*.lnk。这样每次git status就不会被这些系统文件干扰。# 查看当前换行符配置 git config --global core.autocrlf # 如果输出不是 true手动设置 git config --global core.autocrlf true # 查看全局忽略文件路径 git config --global core.excludesfile这几条命令可以在 TortoiseGit 自带的 Git Bash 里跑也可以在 Settings 的 Config 面板里直接改。参数含义很直白core.autocrlf控制换行符转换策略core.excludesfile指向全局忽略文件。改完之后新开的仓库会生效已经克隆的仓库需要重新检出或者手动刷新。3. 日常操作提交、拉取、推送在 TortoiseGit 里到底怎么点3.1 提交前的 diff 检查别跳过 TortoiseGit 的「Check for modifications」很多人用 TortoiseGit 的习惯是改完文件直接右键 → Git Commit然后在提交窗口里写一句「fix bug」就完事。这个流程最大的问题是跳过了 diff 检查。TortoiseGit 提供了一个「Check for modifications」菜单点开之后会列出所有被修改、新增、删除的文件双击任意一个文件就能看到具体的行级差异。这个步骤看起来多余但它能拦住两类低级错误一是误改了不该改的文件比如本地配置文件二是提交信息写得太笼统导致后面回溯困难。我自己的习惯是每次提交前先点一次 Check for modifications确认改动范围符合预期再进 Commit 窗口。Commit 窗口里有两个区域需要关注上半部分是文件列表可以勾选本次要提交的文件下半部分是提交信息输入框。TortoiseGit 默认会勾选所有已修改文件如果你只想提交其中一部分取消勾选即可。提交信息建议写清楚「做了什么」而不是「改了什么」比如「修复登录页在移动端的布局错位」就比「修改 css」有用得多。# 等价于 Check for modifications 的命令 git status # 查看具体差异 git diff # 查看已暂存的差异 git diff --cachedgit status列出工作区和暂存区的状态git diff看未暂存的改动git diff --cached看已经git add过的改动。TortoiseGit 的 Check for modifications 本质上就是这两个命令的图形化封装。3.2 拉取与推送Pull 和 Fetch 的区别以及什么时候该用哪个TortoiseGit 右键菜单里有「Git Pull」和「Git Fetch」两个选项很多人分不清。简单说Fetch 只把远程的最新提交拉到本地但不合并到当前分支Pull 等于 Fetch 加 Merge拉完直接合并。如果你本地有未提交的改动Pull 可能会触发冲突或者直接失败这时候先用 Fetch 看看远程有什么变化再决定怎么合并。Pull 对话框里有一个「Rebase」选项勾上之后会用 rebase 代替 merge。Rebase 的好处是提交历史更线性坏处是如果操作不当容易丢提交。新手建议先用默认的 merge 模式等熟悉了再考虑 rebase。Push 操作相对简单右键 → Git Push确认目标远程仓库和分支点 OK 就行。如果推送被拒绝通常是因为远程有你本地没有的提交先 Pull 再 Push 即可。# 拉取但不合并 git fetch origin # 拉取并合并 git pull origin main # 推送当前分支到远程 git push origin main这三条命令对应 TortoiseGit 的 Fetch、Pull、Push 三个菜单项。origin是远程仓库的默认别名main是分支名。如果你的分支叫develop把main换成develop就行。3.3 查看日志与回退TortoiseGit 的 Show Log 比命令行更直观的地方TortoiseGit 的「Show Log」是我用得最多的功能之一。它会以列表形式展示当前分支的所有提交每条记录包含提交哈希、作者、时间、提交信息。选中某条提交下方会显示这次提交改动的文件列表双击文件能看到具体 diff。更实用的是Show Log 窗口支持右键操作可以「Revert change by this commit」来撤销某次提交的改动也可以「Reset to this commit」把当前分支重置到某个历史节点。Reset 有三种模式Soft、Mixed、Hard。Soft 只移动 HEAD 指针不改工作区和暂存区Mixed 移动 HEAD 并重置暂存区但保留工作区改动Hard 全部重置工作区改动也会丢失。用 Hard 之前一定要确认没有未提交的改动否则就是血泪教训。# 查看提交日志 git log --oneline --graph --all # 重置到某个提交保留工作区改动 git reset --mixed commit-hash # 重置到某个提交丢弃所有改动 git reset --hard commit-hash--oneline让日志更紧凑--graph显示分支合并图--all显示所有分支。reset的三种模式对应 TortoiseGit Reset 对话框里的三个选项选之前看清楚说明。4. 分支与合并从创建到合并请求的完整操作路径4.1 创建分支、切换分支以及「Switch/Checkout」对话框里的两个关键选项TortoiseGit 创建分支的入口在右键 → TortoiseGit → Create Branch。对话框里需要填分支名以及选择基于哪个提交创建。默认是基于当前 HEAD也可以勾选「Specific revision」指定某个历史提交。创建完分支不会自动切换过去需要再点「Switch/Checkout」来切换。这个对话框里有两个选项值得注意一个是「Create New Branch」勾上之后可以在切换的同时创建新分支另一个是「Overwrite working tree changes」这个选项在你有未提交改动时才会亮起勾上意味着丢弃本地改动强制切换。后者要慎用除非你确定那些改动不要了。# 创建分支 git branch feature/login # 切换到该分支 git checkout feature/login # 创建并切换等价于上面两步 git checkout -b feature/logingit branch只创建不切换git checkout切换分支-b参数把两步合成一步。TortoiseGit 的 Create Branch 和 Switch/Checkout 分别对应这两步。4.2 合并分支Merge 对话框里的 Fast-forward 与 No-fast-forward合并操作在右键 → TortoiseGit → Merge。对话框里会让你选择要合并进来的分支以及几个选项。最重要的是「Fast-forward」相关的设置如果当前分支没有新提交Git 默认会直接移动指针这叫 fast-forward 合并历史记录里看不出分支存在过。如果你想保留分支记录可以勾选「No fast-forward」这样会生成一个合并提交。另一个选项是「Squash」勾上之后会把被合并分支的所有提交压缩成一个不保留原始提交历史。这个适合功能分支提交很碎的情况但压缩之后就看不到中间过程了按需选择。# 合并 feature/login 到当前分支 git merge feature/login # 禁止 fast-forward生成合并提交 git merge --no-ff feature/login # 压缩合并 git merge --squash feature/login--no-ff强制生成合并提交--squash把多个提交压成一个。TortoiseGit Merge 对话框里的对应选项勾上即可。4.3 合并请求前的自查清单用 TortoiseGit 做一次完整的 diff 审查在发起合并请求之前建议用 TortoiseGit 做一次完整的自查。具体做法是在 Show Log 里选中目标分支和当前分支的共同祖先然后右键 → Compare with working tree这样能看到当前分支相对于共同祖先的所有改动。重点检查三类文件一是配置文件确认没有把本地路径、密钥、调试开关提交上去二是自动生成的文件比如编译产物、日志文件这些通常应该在.gitignore里三是大文件超过几 MB 的文件要确认是否真的需要进版本库。# 查看当前分支相对于 main 的差异文件列表 git diff --name-status main...HEAD # 查看具体差异 git diff main...HEAD--name-status只列出文件名和变更类型A 新增、M 修改、D 删除...表示三点比较找的是共同祖先到当前 HEAD 的差异。这个命令在合并请求前跑一遍能快速定位意外改动。5. 冲突处理TortoiseGit 的合并工具怎么用才不丢代码5.1 冲突是怎么产生的三方合并的直观解释冲突的本质是同一个文件的同一区域被两个分支分别修改了Git 不知道该听谁的。比如你在feature/login分支把某行代码改成了 A同时main分支把它改成了 B合并时 Git 就会标记冲突让你手动决定保留哪个。TortoiseGit 在检测到冲突时会弹出提示冲突文件图标会变成黄色感叹号。这时候不要慌右键冲突文件 → TortoiseGit → Edit Conflicts会打开 TortoiseGitMerge 工具。这个工具分三个面板左边是「Mine」当前分支的版本右边是「Theirs」要合并进来的版本中间是合并结果。上方还有一行显示「Base」共同祖先的版本用来参考。5.2 用 TortoiseGitMerge 解决冲突逐块选择与手动编辑TortoiseGitMerge 的界面看起来复杂但操作逻辑很简单每个冲突块都有两个按钮一个表示采用左边一个表示采用右边。如果你需要两边都保留可以手动在中间面板编辑。解决完一个冲突块点「Mark as resolved」跳到下一个全部处理完之后保存文件。保存之后回到资源管理器右键 → TortoiseGit → Resolved把冲突文件标记为已解决。然后正常提交即可。如果中途发现解决错了可以用「Revert」撤销这次合并重新来一遍。# 查看冲突文件列表 git status # 手动解决冲突后标记为已解决 git add conflicted-file # 完成合并提交 git commitgit status会列出所有冲突文件git add把解决完的文件加入暂存区git commit完成合并。TortoiseGit 的 Resolved 菜单等价于git add。5.3 冲突解决后的验证别只看文件保存了要跑一遍构建冲突解决完、提交也完成了不代表万事大吉。冲突解决过程中很容易出现语法错误或者逻辑遗漏比如少了一个括号、多了一行重复代码。我自己的习惯是解决完冲突后立刻跑一遍构建或者测试确认没有引入新问题。如果项目有 CI推送之后看 CI 结果也行。但本地能跑一遍最好毕竟 CI 排队也要时间。TortoiseGit 本身不提供构建功能这一步需要你手动执行项目的构建命令。# 示例Node.js 项目跑一遍测试 npm test # 示例Java 项目跑一遍编译 mvn compile这两条命令只是示例具体跑什么取决于你的项目类型。核心原则是冲突解决后的代码必须经过一次完整验证不能直接推送。6. 避坑与排查TortoiseGit 用久了才会遇到的五个问题6.1 图标覆盖不显示Windows 图标缓存和注册表顺序的坑现象装完 TortoiseGit 之后文件夹图标没有变成绿色对勾或者红色感叹号看起来和普通文件夹一样。原因Windows 的图标覆盖最多只支持 15 个而系统里可能装了多个提供图标覆盖的软件比如云盘同步工具TortoiseGit 的图标被挤掉了。另外图标缓存损坏也会导致不显示。解决先重启资源管理器如果不行就重建图标缓存。具体做法是删除%localappdata%\IconCache.db然后重启。如果是图标覆盖数量超限需要调整注册表里HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers下的顺序把 TortoiseGit 相关的项前面加空格让它排前面。6.2 提交时提示「Please tell me who you are」用户名邮箱没配或配错位置现象点 Commit 之后弹窗报错提示需要配置用户信息。原因TortoiseGit 的 Settings 里 Name 和 Email 没填或者填了但没保存到全局配置。有时候在项目级别配了但全局没配换一个仓库又不行了。解决打开 TortoiseGit Settings → Git确认 Global 里的 Name 和 Email 都有值。如果之前用命令行配过检查git config --global --list的输出里有没有user.name和user.email。没有就补上。6.3 推送被拒绝远程有新提交本地没拉现象Push 的时候提示「rejected」或者「non-fast-forward」。原因远程分支有你本地没有的提交Git 不允许直接覆盖。解决先 Pull 再 Push。如果 Pull 之后有冲突按第 5 章的方法解决。如果确认远程的提交不需要可以用git push --force但强制推送会覆盖远程历史团队协作中慎用。6.4 换行符导致整个文件被标记为修改autocrlf 配置不一致现象只改了一行代码但git diff显示整个文件都变了。原因换行符配置不一致Git 把 CRLF 和 LF 的差异当成了内容修改。解决确认core.autocrlf设置为true然后在项目根目录加一个.gitattributes文件明确指定文本文件的换行符处理方式。比如* textauto让 Git 自动处理*.sh text eollf强制 shell 脚本用 LF。6.5 大文件提交后仓库体积暴涨没有配 Git LFS现象提交了一个几百 MB 的二进制文件之后每次克隆都很慢仓库体积下不来。原因Git 会保存文件的每个版本大文件多次修改会让.git目录迅速膨胀。而且即使后来删除了文件历史记录里还在。解决安装 Git LFS用git lfs track *.psd之类的命令把大文件交给 LFS 管理。如果已经提交了需要用git filter-repo或者 BFG 工具清理历史操作比较复杂建议在提交前就配好.gitignore和 LFS。7. 进阶技巧用 TortoiseGit 的钩子脚本和命令行混合操作提效TortoiseGit 除了右键菜单还支持配置客户端钩子脚本Client Hook Scripts。入口在 Settings → Hook Scripts可以针对特定操作比如 Pre-Commit、Post-Commit绑定一个可执行脚本。比如你可以写一个 Python 脚本在每次提交前自动检查代码风格不通过就阻止提交。配置方式是在 Hook Scripts 里点 Add选择 Hook Type比如 Pre-Commit然后指定脚本路径和参数。脚本的退出码决定是否继续返回 0 表示通过非 0 表示阻止。这个机制适合做轻量级的本地检查比如禁止提交.env文件、检查提交信息格式等。# pre_commit_check.py # 检查暂存区是否包含 .env 文件 import subprocess import sys result subprocess.run( [git, diff, --cached, --name-only], capture_outputTrue, textTrue ) staged_files result.stdout.strip().split(\n) for f in staged_files: if f.endswith(.env): print(f禁止提交环境配置文件: {f}) sys.exit(1) # 非零退出码阻止提交 sys.exit(0)这个脚本的逻辑很简单调用git diff --cached --name-only拿到暂存区文件列表遍历检查是否有.env结尾的文件有就打印提示并返回 1。TortoiseGit 在 Pre-Commit 钩子里执行这个脚本返回 1 就会阻止提交。参数方面脚本路径建议用绝对路径避免工作目录变化导致找不到文件。另一个提效技巧是 TortoiseGit 和命令行的混合使用。TortoiseGit 的 Settings 里可以配置「Git Bash」的启动入口右键菜单里也能直接打开 Git Bash。有些操作命令行更快比如批量修改提交信息、交互式 rebase这些在 TortoiseGit 里要么不支持要么很别扭。我的习惯是日常提交用 TortoiseGit复杂历史操作用命令行两者配合效率最高。最后说一个我自己的教训不要在生产分支上直接做实验性操作。我曾经在main分支上试过一次git reset --hard结果把当天所有未推送的提交全丢了最后靠 IDE 的本地历史才找回来。从那以后任何有风险的操作我都会先建一个临时分支确认没问题再合并回去。这个习惯看起来麻烦但比丢代码之后后悔强得多。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑