SourceTree实战全解:图形化Git操作与贮藏新文件技巧

发布时间:2026/9/18 17:52:29
SourceTree实战全解:图形化Git操作与贮藏新文件技巧 提到 SourceTree很多人的第一反应是那不是新手才用的图形化 Git 工具吗。我以前也是这么想的命令行用了三年git status、git diff、git stash闭着眼都能敲骨子里觉得 GUI 多余。直到有一次我改了一天代码改动还处在半成品状态临时接到需求要切到另一个分支去修线上问题。不能提交又不敢丢那一刻我才认真打开了 SourceTree 的贮藏Stash功能从此再也没觉得这是个小工具。SourceTree 是 Atlassian 推出的免费 Git 图形客户端支持 Windows 和 macOS底层还是调用 Git但把仓库状态、分支脉络、冲突处理这些最费脑子的东西画成了界面。这篇文章不打算写成像官方文档那样一条条罗列我就按自己从下载安装到日常使用的真实路径来聊把那些最容易踩的坑、最容易被忽略的设置以及贮藏新加的文件到底该怎么操作这类热搜问题的答案一次性讲透。1. 连续折腾 Git 命令行三年之后我为什么还是装回了 SourceTree先坦白一下我的心路历程方便你判断这篇文章到底值不值得继续读。我是从git init开始入门的那会儿跟着教程敲命令觉得这种输入指令-看输出的交互方式特别有掌控感。后来项目越来越大同事数量也多了Git 命令开始变得没那么够用。最常见的局面是拉完代码后发现工作区不干净不知道该不该直接git checkout .分支切来切去偶尔忘了git stash只能对着git reflog干瞪眼。真出问题的时候命令行给出的报错信息对新手非常不友好一行红字丢过来根本不知道是哪个环节出了岔子。装上 SourceTree 之后我首先被解决掉的是状态可视化问题。整个仓库当前有多少文件改动、哪些已经暂存、哪些还没跟踪、当前在哪个分支、本地分支和远程分支差了多少个提交全部一眼就能看完。进了公司项目第一周我发现自己从一个命令行熟练工变成了界面操作流队友交代码给我 review 之前我都会先在 SourceTree 里看一眼提交记录和文件变动看的是图脑子里的信息量却一点没少。这里想认真说一句公道话SourceTree 不是给小白的工具它是给所有不想把精力浪费在记忆命令上的人的工具。你会命令行不影响你同时用 GUI真正让我留下来的原因是它可以降低犯错成本。同样一次误删分支命令行可能需要翻一堆文档才能恢复图形界面上右键点几下就能找回。工具是拿来辅助思考的不是拿来展示熟练度的。它的短板也很明显启动比命令行慢特别大的仓库会有卡顿感某些冷门功能在界面上藏得太深。所以我不建议把 SourceTree 当成命令行替代品而应该当成日常驾驶用的车——快速、稳妥、出事好处理真要修车的时候你再掀开引擎盖手搓也不迟。2. 下载与安装版本选型、环境准备、首次启动的关键设置2.1 下载渠道和版本差异先解决从哪下的问题。SourceTree 官方下载地址是sourcetreeapp.com这是最稳妥的渠道不要去第三方软件站下破解版或绿色版之前有用户反映过捆绑安装、绿化不彻底的现象一个 Git 工具没必要冒这个风险。Windows 和 macOS 都有对应的原生版本。Windows 安装包是.exemacOS 装的是.dmg或者直接在 App Store 搜 SourceTree。这里有个常见认知误区App Store 版和官网版并不是同一个维护节奏App Store 版经常比官网版滞后几个小版本。如果你用 Mac我建议直接去官网下载省得遇到某些在旧版本上修复过的问题时还要干瞪眼。另外一些包管理器也能装比如 Windows 的winget install SourceTree、choco install sourcetreemacOS 的 Homebrew 也有brew install --cask sourcetree。不过包管理器版本未必是最新的而且可能和系统已有的 Git 环境产生版本兼容问题我自己不推荐除非你特别习惯用命令行管理软件。2.2 安装过程中最关键的系统 Git 还是内置 Git安装 SourceTree 走到一半会有一步值得停下来认真看让你选择使用系统 Git 还是 SourceTree 自带的内置 Git。它俩的区别说白了就是这辆车用现成的发动机还是自带发动机。如果你电脑上已经装了 Git并且在命令行里也依赖这个 Git我建议选系统 Git。这样 SourceTree 和命令行看到的版本库行为完全一致不会有命令行能正常提交、SourceTree 里却报错的割裂感。安装 SourceTree 的时候它会自动检测系统里的 Git 路径不用你手动指定。但如果你是完全的新手机器上从来没装过 Git那就别纠结直接选内置 Git。SourceTree 会带上一套完整的 Git 环境开箱即用。唯一要注意的是内置 Git 的版本可能不是最新的当你在某些新特性比如 Git LFS 或部分合并策略上遇到问题时优先想到这可能是内置 Git 版本太旧届时再切换到系统 Git 即可。还有一个很容易被忽略的点安装路径尽量用英文不要放在中文目录下。虽然新版本对中文路径的支持已经好了很多但 Git 底层对中文路径偶尔还是会出现编码问题能避免就避免。2.3 首次启动Atlassian 账号、License 和 SSH 密钥新版 SourceTree 首次启动会要求登录 Atlassian 账号。这一步很多人会在网上吐槽觉得一个免费工具凭什么强制登录。其实它就是在激活许可证SourceTree 本体并不收费但这个流程没法跳过。如果你没有账号当场注册一个就行不需要绑卡。登录环节偶尔会遇到页面刷不出来或者回调失败的情况这通常是本地网络环境的锅和软件本身关系不大。我的经验是先确认网络能正常访问国外站点再重新打开 SourceTree 重试一次如果反复失败换个时间再试问题多半就消失了。不建议为了避开登录去强行用破解脚本维护成本高Git 客户端握着你代码仓库的凭据安全性远比省那两步登录重要。首次进主界面后我强烈建议先去工具 - 选项 - 认证看一眼。如果你的远程仓库走的是 SSH 协议这里会显示已加载的 SSH 密钥走 HTTPS 协议的话SourceTree 支持保存 Bitbucket、GitHub、GitLab 等平台的账号密码填一次后面推送拉取都不用再输。配置好这一步后续使用流畅度会提升一大截。3. 关联本地仓库把一个已经存在的项目交给 SourceTree3.1 关联到底做了什么我见过不少人的困惑SourceTree 里添加工作目录和克隆仓库到底啥区别会不会把我本地项目复制走一份其实完全不会。SourceTree 对所有仓库的操作都是基于.git目录完成的它只是打开你已有的版本库不会移动、复制、修改你的文件路径。项目目录还是原来那个目录你同事在终端里照样能对这个项目执行 Git 命令。理解了这一点你就知道为什么 SourceTree 不需要你把项目导入某个专属目录了。它更像一个遥控器你告诉它我家项目在这它就去读那里的版本记录然后画成界面。3.2 三个入口的适用场景SourceTree 的主界面上能找到克隆/新建按钮点开后里面有三个标签页克隆仓库、新建仓库、添加工作目录。克隆仓库适用于远程仓库已经存在你想把它复制到本地。需要填远程 URLHTTPS 或 SSH 都行、本地目标路径以及想给这个目录起什么名字。克隆完成后就直接进入 SourceTree 仓库列表了。新建仓库适用于本地还没有任何 Git 版本库的项目。选中一个空目录或已有文件目录SourceTree 会帮你执行git init让这个目录变成 Git 仓库。这一步相当于执行了一次git init之后同样会出现在仓库列表里。添加工作目录适用于本地项目已经git init过了仓库是现成的你只是想让 SourceTree 接管。直接选到包含.git的顶层目录SourceTree 会自动识别并加入列表。如果你手里的项目还没初始化 Git最省事的路线是先在 SourceTree 里用新建仓库选中项目目录它会自动帮你初始化然后再用添加工作目录把它加入列表。其实加完之后你会发现这两步的本质是一样的只是 SourceTree 把git init的活儿包办了。3.3 关联以后认识一下主界面首次进入一个仓库界面会分成几个区块我按使用频率从高到低排一下左侧仓库列表所有已添加的仓库都显示在这里切换项目就在这个列表里点。工具栏按钮抓取、拉取、推送、提交这几颗最常用的按钮在顶栏最显眼的位置。左侧栏标签文件状态是日常操作入口日志/历史是查看提交记录的地方分支里能看到所有本地和远程分支。中间主要区域切到文件状态时中间会显示当前工作区的改动文件切到日志时中间会显示提交历史图。新手最容易犯的操作错误是一打开仓库就到处乱点右键然后在弹出的菜单里看到丢弃重置这种危险选项想也没想就点了。我的建议是前三天只用那四个按钮抓取、拉取、推送、提交。等熟悉了再看别的这样能避免大量误操作。3.4 关联过程中的三个典型坑嵌套仓库。如果你项目里某个子目录也含有一个.git文件夹比如半路加进来的独立 Git 项目SourceTree 会把它识别成子仓库或子模块界面显示会变得很怪提交时也可能把子目录当作指针提交而不是提交具体内容。遇到这种情况先想清楚它是该作为 Git 子模块管理还是纯粹误放的临时仓库如果是误放的删掉多余.git目录再回 SourceTree 刷新即可。中文路径。前面提过Git 对中文路径的历史支持不够完美。如果你在 SourceTree 中看到文件路径乱码或者提交时提示找不到文件先排查项目路径和文件名里的中文。与其折腾各种编码设置不如从源头保持英文路径。SSH 认证失败。关联仓库后第一次抓取时如果远端走 SSH而你的密钥没有加载进 SourceTree它会报权限拒绝之类的错误。解决办法是去工具 - 选项 - 认证里确认 SSH 客户端配置和密钥是否已加载。Windows 用户常见的坑是用了 OpenSSH 格式的私钥SourceTree 部分版本对.ppk格式支持更好遇到认证问题先往这个方向排查。4. 日常操作的主干流程提交、拉取、推送、分支切换如何不自乱阵脚4.1 工作区状态一眼看穿哪些文件动了文件状态面板是日常最常待的地方。它会把你当前工作区的文件分成三类已修改、已暂存、未跟踪。已修改表示文件被改动但还没git add已暂存表示已经加入暂存区准备进下一次提交未跟踪则是新建出来的文件Git 还没开始关注它。SourceTree 用不同的标记颜色区分类别并且在文件右侧显示改动量。比命令行直观的地方在于你能在同一个界面里看到哪些改了但没存哪些存了但没提交哪些新文件还没被 Git 管理这些信息在 terminal 里往往要交叉执行好几条命令才能拼齐。我习惯每天上班第一件事先看一眼文件状态面板。如果出现了计划外的改动文件能在五分钟内发现而不等提交时才被队友提醒你改了什么不该改的东西。4.2 提交的正确节奏小步走别一把梭提交这件事SourceTree 简化到了点几下就能完成的程度但这反而带来一个副作用很多人开始闭着眼睛点提交。我的建议是每次提交只做一件逻辑上完整的事。比如修复登录按钮点击无响应算一次提交重构接口请求方式算另一次提交。这需要你对暂存区有控制力好在 SourceTree 的暂存操作非常灵活。你可以在文件列表里右键某个文件选择暂存或取消暂存也可以只把一个文件里的部分改动拖进暂存区实现同一文件中只提交半个文件的效果。很多初学者不知道 SourceTree 支持行级别暂存。双击文件打开差异视图后左侧有暂存行暂存块的选项你可以只把某几行改动加入暂存区剩下的留在工作区继续修改。这个功能在处理一个文件里混了两种不相关修改时救过大命。提交信息我习惯遵循动词开头 做了什么 为什么的格式比如修复用户头像上传失败时提示不明确的问题而不是改代码。SourceTree 会让你在提交前看到暂存区和未暂存区的差异提交之前花三十秒扫一遍能拦截掉大量低级错误。4.3 抓取、拉取、推送三个词别搞混新手最容易混淆的是抓取和拉取。SourceTree 明确把它们拆成了两个按钮抓取是git fetch只把远程仓库的最新提交记录下载到本地不会改变你工作区里的任何文件拉取是git pull实质上等于先抓取再合并会把远程的最新代码合并到当前分支上。什么样的操作节奏是健康的我自己的习惯是改代码前先抓取一次看看远程有没有新提交确认没有冲突或解决冲突后再拉取最新代码然后开始在干净的基础上开发开发完本地小步提交提交若干次后再推送到远程。这样做的好处是把了解远程动态和改变本地状态这两个动作分开不会因为一次拉取覆盖掉自己手头的进展。还值得提的是拉取方式。SourceTree 的拉取下拉菜单里通常有拉取和拉取变基两个选项。普通拉取会产生一个合并提交而变基拉取会把你的本地提交垫到远程提交之上历史看起来是一条直线。对于单人维护的分支我常用变基拉取历史干净对于共享分支不推荐对已推送到远程的提交做变基容易把队友的历史搅乱。4.4 分支切换和团队分支策略分支管理是 SourceTree 相对命令行最明显的优势之一。左侧分支标签页里本地分支和远程分支分开展示每个分支右侧会标明相对远程分支领先或落后多少个提交。切换分支只需要双击本地分支名称SourceTree 会在切换前检查工作区是否干净如果有未提交的修改它会提醒你先提交或贮藏这个保护机制能避免你带着杂乱的工作区直接跳分支。团队协作层面我很建议用 SourceTree 内置的 GitFlow 功能菜单栏右上Git Flow图标。它会自动生成develop、feature、release、hotfix这几类分支并规定各自的命名规范和流向。当初我们小组四个人并行开发从用 GitFlow 之前谁跟谁冲突全凭缘分到之后每个功能一个 feature 分支合并进 develop 后自动删除远程分支协作顺畅了很多。个人项目的分支不用搞那么复杂我常用的就三个main当稳定版本分支、dev当集成测试分支、临时功能分支按需创建。分支名字尽量用英文短横线连接比如feature/login-page别用中文也别用空格。5. 贮藏功能深度拆解临时放下手头改动不丢文件也不忙乱5.1 贮藏解决的真实场景先看看你是否遇到过下面这些情况代码写了一半还没法提交但线上有个 bug 必须立刻切分支去修准备拉取远程代码结果提示本地有未提交的修改无法拉取想临时做个实验又不希望实验性改动污染当前分支历史。前三秒钟你的选择可能是把改动复制到一个临时文本里然后git checkout .丢弃工作区改动等回来再粘贴回去。这是最原始的人工贮藏文件多了必翻车。SourceTree 的贮藏功能相当于把你的半成品改动整体打包存放到一个临时空间然后让工作区恢复到干净状态。等你想继续时再把它拿出来改动还在一条都不会少。它和提交的本质区别在于贮藏不产生提交记录只存在于本地贮藏列表里。5.2 如何在 SourceTree 里执行一次贮藏操作路径很直接在文件状态面板点工具栏上的贮藏按钮会弹出一个对话框。对话框里有几个选项重点看这两个包含未跟踪文件默认不勾选。如果你的改动里有新建但还没git add的文件也就是未跟踪文件不勾它这些文件不会被贮藏它们会继续留在工作区里。包含忽略文件默认不勾选。只有连.gitignore里配置的忽略文件你都想一起藏起来时才需要勾选日常基本用不上。填上一条能描述当前状态的备注比如登录模块重构一半点击创建贮藏SourceTree 就会把工作区做完一次大扫除工作区里那些改到一半的内容全部消失文件状态恢复干净。这里就是热搜词SourceTree 如何贮藏新加的文件的核心答案只要是未跟踪的新文件你就必须手动勾选包含未跟踪文件这个选项否则你会发现贮藏完后那些新文件还莫名其妙地留在工作区里还以为出了 bug。5.3 贮藏新加文件的三种操作方式除了在贮藏对话框里勾选包含未跟踪文件还有两种不算太冷门的办法先把新文件加入暂存区git add或 SourceTree 里右键暂存再执行贮藏操作。git stash在默认行为下连带暂存区里已跟踪的文件一起处理但如果你只是git init之后把新文件 add 了Git 会认为它是已跟踪但处于暂存状态的新文件所以也能被贮藏带走。不过这种方式会连同暂存状态一起存起来恢复后需要重新暂存稍微绕一点。如果你只想让这个新文件暂时消失但又不想让它在贮藏列表里占位那其实不适合用贮藏可以直接把它移到项目目录外或者干脆用.gitignore临时忽略。但我不推荐用忽略的方式藏文件因为刷新文件状态时忽略文件默认看不见改个配置没改回来很容易让人误以为代码丢了。我个人的首选还是勾选包含未跟踪文件因为它最直观不夹带任何额外状态。实测下来不管新文件是纯文本、图片还是配置文件都能被完整地带走和恢复。5.4 恢复贮藏应用和弹出有什么区别贮藏完成后左侧边栏会多出一个贮藏标签页或者可以在某个下拉面板里看到贮藏列表里面就是按时间排列的 stash 条目每条都有你之前填的备注。恢复贮藏的时候SourceTree 给你两个选择应用贮藏Apply Stash把贮藏里的改动放回工作区但贮藏列表里那条记录还会保留。适合我想试一下这些改动但还不确定要不要彻底恢复的情况。弹出贮藏Pop Stash把改动放回工作区同时从贮藏列表里删掉那条记录。适合我确定要继续接着写的情况。两者的本质区别一个是复制出来一个是剪切出来理解了这个逻辑就不会混。特别提醒如果当前分支不是当初创建贮藏时的分支应用贮藏可能会产生冲突。SourceTree 会像普通冲突一样提示你手动解决。我遇到过同事在不干净的状态下直接弹出了另一个分支的贮藏结果冲突标记糊了一整屏。所以操作前养成一个习惯先看当前分支对不对再确认工作区是干净的。5.5 贮藏误删了怎么办SourceTree 里可以右键某条贮藏记录选择删除Drop。如果一不小心删掉了先别慌。一般来说 SourceTree 界面里删了底层就是执行了git stash drop对应的 commit 对象在 Git 里不会立刻被彻底清掉短时间内有机会找回。找回办法目前图形界面自身不提供得借助命令行git fsck --lost-found git show 找到的 commit hash git stash apply commit hashgit fsck --lost-found会列出所有不可达的 Git 对象其中类似commit的对象就是被丢弃的 stash 存储节点。实测大多数情况下都能找回来但时间拖得越久对象被 GC垃圾回收清理的概率越大。所以真的误删了第一动作是停止一切可能触发 GC 的操作尽快用命令行找回。6. 冲突解决与异常恢复SourceTree 比命令行舒服的地方6.1 冲突在界面上长什么样多人协作冲突是无法避免的。命令行遇到冲突会让不少人头皮发麻满屏都是 HEAD和的标记退出 vim 都要想半天。SourceTree 把冲突可视化做得相当到位。当拉取、合并或应用贮藏产生冲突时文件状态面板里对应的文件会标记出冲突状态。双击冲突文件SourceTree 会打开一个差异视图把冲突区域的当前分支内容和传入内容并排展示。此时选定保留哪一边或者手动编辑后再标记为已解决整个过程都在界面上完成。6.2 解决冲突的标准操作链路我的建议链路是先在 SourceTree 的日志或文件状态里定位到冲突文件双击打开。逐段看冲突标记搞清楚哪些改动是自己这边的哪些是对方的。如果冲突块很小直接在差异视图里编辑即可如果冲突块很大或涉及文件多处建议用外部合并工具。SourceTree 可以在工具 - 选项 - 比较里配置外部合并工具比如 KDiff3、Beyond Compare 等。编辑完成后在 SourceTree 里右键冲突文件选择标记为已解决Resolve Mark。回到主界面提交这次合并。这里必须提醒一个新手常犯的错误看到冲突文件右键选择放弃或提交他们来解决冲突是不对的。放弃我的修改和放弃对方的修改都是二选一很多时候冲突恰恰需要把两边的改动都保留。只有当你明确知道某一边完全没用了才应该用这种粗暴解决的方式。6.3 误操作恢复找回不小心删除的分支和提交SourceTree 让人安心的一大理由是它把删除分支这种操作做成了可视化你可以在日志图里直观地看到删除前后发生了什么。我讲一个真实经历。有一次我给主干分支做了一次代码清理误删了一个还没合并到主干的功能分支里面有几个关键提交没推送到远程。第一反应是吓一跳但 SourceTree 带了一个显示所有分支的视图我勾选之后日志图里仍然能看到那个分支指向的提交右键那个提交选择从此处创建分支输入原分支名删掉的分支就完整恢复了。这个机制的本质是分支只是一个指向提交的游标删除分支只是移除了游标提交本身还留在版本库里。只要提交还存在于历史图或 reflog 里就有机会恢复。如果连日志图里都找不到再用命令行git reflog git checkout -b recover-branch commit-hashgit reflog会记录 HEAD 的所有移动历史哪怕是重置、误删、回退这类操作都留有痕迹。我建议 GUI 用户也最好掌握这两个命令它们是图形界面漏掉异常恢复时最后的兜底。7. 我用 SourceTree 这几年攒下的几个使用习惯和避坑建议7.1 大仓库卡顿和省内存的解法SourceTree 遇到超过 1GB 的大型仓库尤其是带大量图片、压缩包等二进制文件的仓库启动和刷新会明显变慢。这不是你一个人会遇到的问题我身边同事也普遍反馈过。我的应对思路是三步确保.gitignore把node_modules、dist、build、bin、*.log这些内容排除在版本库外别让 Git 跟踪那些可以随时再生成的依赖和产物文件。如果项目里已经有大量二进制资源在版本库中考虑引入 Git LFSLarge File Storage把大文件托管到 LFS 指针。SourceTree 对 LFS 有基础支持装好 Git LFS 后操作方式几乎没有变化。日常使用中不必要时不开多个大型仓库。SourceTree 会同时维护所有打开仓库的索引仓库开得越多内存越紧张。还有一个隐藏技巧大仓库的操作尽量集中在文件状态和日志两个页面来回切换不要频繁点击分支标签里的全量刷新否则 SourceTree 会为了渲染图形而不自觉地消耗大量资源。7.2 登录态失效、认证过期的处理新版 SourceTree 启动依赖 Atlassian 账号登录这个登录态偶尔也会失效具体表现为打开软件后卡在登录页或者原本能正常推送的仓库突然提示认证失败。遇到这种情况先在工具 - 选项 - 认证里看看已保存的账号凭据重新登录一次如果还不行可以把失效的凭据删掉重新添加一次。这里有一点要强调SourceTree 保存的远程仓库密码通常是本地加密存储的但在公共电脑或多人共享的办公机器上我仍然不建议勾选记住密码宁可每次推送时输一次也别把公司代码仓库的访问凭据长期挂在共享环境下。7.3 我给自己定下的三条操作纪律踩过的坑多了我慢慢给自己定了几条规矩分享出来提交前必看差异。不管 SourceTree 的提交流程多顺滑提交之前一定要点开文件看一遍右侧的 diff。很多时候顺手改掉的空行和以为没改却变了的内容都能在这一步被拦住。切分支前保证工作区干净。如果工作区有任何未提交或未贮藏的改动不要切分支。SourceTree 虽然会提醒但还是有人会一时手快点掉警告。宁可多花几秒钟贮藏也不要赌这个分支切换不会出事。拉取前先理顺本地提交。如果你本地有尚未推送的提交而远程又有新提交普通拉取就会产生一次合并提交。如果不想让历史乱七八糟先用变基拉取或者先把本地提交整理后再拉取。这三条不算技术纯粹是使用习惯但它们能帮你规避掉绝大多数让人头大的版本库事故。7.4 快捷键和自定义操作把不常用的重复动作自动化SourceTree 支持 Windows 和 macOS 的常用快捷键比如提交、推送、切换分支等操作都有默认键位。具体按键可以在工具 - 选项的快捷键设置里看到并自定义这里不抄一遍文档了只提醒一句快捷键列表值得花十分钟看一眼把暂存贮藏打开历史这几个高频操作的快捷键记下来日常效率会有可见提升。更进阶的玩法是自定义操作。在工具 - 选项 - 自定义操作里可以添加针对文件的右键菜单命令本质上是在 SourceTree 里挂载任意命令行脚本。我给自己配过两个至今还在用的部署到测试环境选中当前分支后右键执行一段部署脚本把当前分支代码推到测试服务器。打开 Terminal 到此目录在仓库里右键直接打开命令行界面省去手动定位目录的麻烦。这两个操作让我在 GUI 和命令行之间来回切换的摩擦小了很多。你可以根据自己的工作流设计类似的脚本这是 SourceTree 隐藏得比较深、但在团队内部流传甚广的效率神器。回到开头那句结论SourceTree 不是新手专属也不是菜鸟才用。它把 Git 里最抽象的那些状态、分支、合并关系变成了可视化信息让人能把注意力放在改代码本身而不是记命令。哪怕你依然习惯用命令行应对复杂操作也建议在电脑上留着这样一个图形化助手——危急时刻多一个入口往往就意味着多一条退路。