如何在TortoiseGit中拉取更新后保留本地修改的变更状态?
解决方法
核心思路
你需要把上游更新的合并提交和你的自定义修改分离开:先让主分支同步到GitHub最新版本(包含冲突解决),再把你的自定义修改恢复为未提交的变更状态。以下是两种便捷实现方式:
方式一:利用补丁回溯自定义修改
步骤1:定位关键提交
打开TortoiseGit的「日志」,找到两个关键提交:
- 你提交自定义修改的那个版本(记为
Commit-My,复制它的哈希值) - 拉取上游更新后的合并版本(如果已提交,记为
Commit-Merge)
步骤2:重置到自定义提交状态
如果已经提交了合并结果,先把仓库重置到Commit-My:
git reset --hard <Commit-My的哈希值>
如果还没提交合并结果,先撤销合并:
git merge --abort
步骤3:同步上游最新版本
在TortoiseGit中执行「拉取」,拉取GitHub最新代码,解决冲突后提交这个合并结果。此时你的主分支已经和上游完全同步,且包含冲突解决的内容。
步骤4:恢复自定义修改为未提交状态
命令行方式:
生成自定义修改的补丁文件:
git diff <Commit-My的父提交哈希> <Commit-My的哈希> > my-custom.patch
然后在主分支上应用补丁:
git apply my-custom.patch
TortoiseGit图形界面方式:
在日志中选中Commit-My,右键选择「导出补丁」保存为文件;切换到主分支后,右键选择「应用补丁」,选择刚才保存的补丁文件即可。
方式二:用分支分离修改与上游更新
步骤1:创建自定义修改分支
从Commit-My创建新分支,专门保存你的自定义修改:
git branch my-custom-changes <Commit-My的哈希值>
或者在TortoiseGit日志中右键Commit-My,选择「创建分支」。
步骤2:同步主分支到上游最新
切换回主分支,拉取GitHub最新代码:
git checkout main git pull origin main
如果拉取时出现冲突,解决后提交合并结果。
步骤3:合并自定义分支并保留未提交状态
将自定义分支的修改合并到主分支,但不自动提交:
git merge my-custom-changes --no-commit
此时工作区会显示你的所有自定义修改(包括冲突解决后的内容),而主分支已经是上游最新状态,这些修改会保持未提交的变更状态,符合你的需求。
注意事项
- 操作前务必备份本地仓库(复制整个仓库文件夹),避免误操作丢失数据。
- 若使用TortoiseGit图形界面,所有命令都可以通过右键菜单找到对应功能,无需完全依赖命令行。
内容的提问来源于stack exchange,提问作者user3161924
相关产品推荐
相关产品推荐

