如何把未提交的改动导出为 Git 补丁文件

未暂存改动用 git diff > changes.patch,已暂存改动用 git diff --cached > changes.patch;应用补丁用 git apply changes.patch。适合跨机器搬运改动、临时备份工作区、不方便 push 时分享修改。

最佳实践
Git 提交历史与版本恢复示意

看改动处于哪个状态:未暂存的用 git diff > changes.patch 导出;已暂存(staged)的用 git diff --cached > changes.patch。对方或另一台机器上用 git apply changes.patch 应用。这是不经过远程仓库搬运改动的经典办法。

三种状态的导出

# 1. 未暂存的改动(工作区 vs 暂存区)
git diff > uncommitted.patch

# 2. 已暂存的改动(暂存区 vs HEAD)
git diff --cached > staged.patch

# 3. 全部未提交改动(工作区+暂存区 vs HEAD)
git diff HEAD > all-changes.patch

注意:git diff 不包含未跟踪的新文件。新文件先 git add -N .(intent-to-add)再导出,或改用 git stash create + git stash store 方案。

应用补丁

git apply changes.patch          # 应用到工作区
git apply --check changes.patch  # 先检验能否干净应用
git apply --stat changes.patch   # 看看补丁涉及哪些文件
git apply -R changes.patch       # 反向应用(撤销补丁)

已提交的改动导出

已提交的用 git format-patch(生成带提交信息的补丁,可用 git am 应用成完整提交):

git format-patch -1 HEAD         # 最近一次提交导出为 0001-xxx.patch
git am 0001-xxx.patch            # 在对端应用为提交

常见问题(FAQ)

Q:patch 应用时冲突了怎么办?

git apply 要求上下文精确匹配,目标文件已变化时会失败。用 git apply --3way changes.patch 尝试三方合并,冲突处以冲突标记写入文件,手工解决即可。

Q:二进制文件(图片等)的改动能进补丁吗?

默认 diff 不含二进制内容。加 --binary:git diff --binary > changes.patch,应用方才能完整还原。

Q:patch 和 stash 怎么选?

同仓库临时存放用 stash;跨机器、跨仓库、发给别人评审,用 patch 文件。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台