如何在Sourcetree/Git拉取时不丢失本地更改?Unity3D协作场景咨询
避免Unity协作中拉取代码丢失本地未提交工作的实用方案
嘿,这种情况在Unity多人协作开发里真的太常见了,尤其是同时操作同一个场景的时候——我之前也踩过类似的坑!别担心,咱们从操作习惯、工具配置和协作规范三个维度来解决这个问题:
一、拉取前先给本地工作做个“备份”
这是最直接的防护手段,确保未提交的改动不会被覆盖:
- 用Git Stash临时存储:在Sourcetree里找到「Stash」按钮,把当前未提交的改动暂存到Git的临时存储区。拉取完远程代码后,再点击「Stash Pop」就能把之前的改动恢复回来。这个操作轻量快捷,适合临时保存小范围的改动。
- 创建临时分支提交:如果你的改动比较多,担心stash出问题,不如直接新建一个临时分支(比如
temp-my-x-feature),把未提交的改动提交到这个分支上。拉取主分支的最新代码后,再把临时分支的内容合并回去,这样更稳妥,也方便后续查看改动记录。
二、让Git和Unity“好好配合”
Unity的场景、预制体都是二进制/YAML文件,默认的Git配置很容易出问题,得针对性调整:
- 配置.gitignore过滤冗余文件:在项目根目录创建
.gitignore文件,把Unity自动生成的Library/、Temp/、obj/、Logs/这些文件夹加进去,避免这些临时文件被提交,减少拉取时的冲突和覆盖风险。 - 设置Git正确处理Unity二进制文件:在项目根目录创建
.gitattributes文件,添加以下内容:
这样Git会把这些Unity核心文件当作二进制文件处理,避免不必要的文本合并冲突。另外在Unity的「Edit -> Preferences -> Version Control」里,把Merge Tool设置为*.unity binary *.prefab binary *.asset binaryUnityYAMLMerge,遇到场景冲突时可以用可视化工具合并,不会误删内容。
三、制定协作规范从根源避免问题
再好的工具也抵不上规范的协作流程:
- 明确分工边界:既然你负责X功能、搭档负责Y模块,尽量约定好各自操作的场景节点或资源范围——比如你只碰场景里的「X功能节点组」,他只操作「Y模块容器」,避免同时修改同一个GameObject或场景的同一部分。如果必须交叉修改,提前沟通同步进度。
- 拉取前必查本地状态:在Sourcetree里先看一眼「工作区」,确保没有未提交的改动,或者已经做好了临时存储(stash/临时分支)。不要直接点拉取,不然未提交的内容很容易被远程版本覆盖。
- 小步提交,频繁同步:不要攒着一大堆改动才提交,尽量把工作拆分成小的、可独立运行的单元(比如完成X功能的一个子逻辑就提交一次),这样即使出问题,恢复起来也更简单,同时也能减少和搭档代码的冲突概率。
内容的提问来源于stack exchange,提问作者Durvesh Naik
相关产品推荐
相关产品推荐

