如何在不提交代码的情况下将Git未提交变更迁移至另一台开发机
无需提交未完成代码,迁移Git未提交变更的两种方法
这问题我太熟了!不想在BitBucket留下半成品代码的提交记录,还能把A机的未提交变更(包括编辑的文件和新创建的文件)移到B机,Git有两个非常实用的办法,我给你一步步讲明白:
方法一:用Git Stash导出补丁(推荐,支持新增文件)
这个方法能完美覆盖已编辑文件+新创建的未跟踪文件,是最稳妥的方案:
在开发机A的仓库目录下,把所有变更(包括未跟踪的新文件)暂存到stash里,加个备注方便识别:
git stash push -u -m "temp-migration-stash"这里
-u参数是关键,它会把未跟踪的新文件也一起存进stash里,不然默认只处理已跟踪的文件。把这个stash导出成补丁文件:
git stash show -p stash@{0} > migration.patchstash@{0}指的是最新创建的那个stash,如果之前有其他stash,记得改成对应的序号(比如stash@{1})。把生成的
migration.patch文件传到开发机B的仓库目录下,用你常用的工具就行——比如scp、FTP,甚至传微信都行(只要文件不大)。切换到开发机B的仓库目录,应用这个补丁:
git apply migration.patch检查一下:看看文件编辑内容、新文件是不是都同步过来了,没问题的话,回到开发机A可以把临时stash删掉(留着也行,看你需求):
git stash drop stash@{0}
方法二:用Git Diff生成补丁(适合仅已跟踪文件变更)
如果你的变更只有已跟踪文件的编辑,没有新创建的文件,用这个方法更简单:
在开发机A的仓库目录下,生成变更补丁:
- 只有未暂存的变更:
git diff > migration.patch - 只有已暂存的变更:
git diff --cached > migration.patch - 既有暂存又有未暂存的变更:
git diff > migration.patch && git diff --cached >> migration.patch
- 只有未暂存的变更:
同样把
migration.patch传到开发机B的仓库目录。在开发机B应用补丁:
git apply migration.patch
注意事项
- 确保两台机器的仓库已经拉取了最新版本(你已经提到这点啦,完美),不然补丁可能会冲突。
- 如果应用补丁时提示冲突,Git会告诉你哪些文件有问题,手动修改冲突部分后继续就行。
- 要是用Windows机器传输补丁文件,注意一下换行符的问题——不过Git的
apply命令一般会自动处理,不用太担心。
内容的提问来源于stack exchange,提问作者Yahya Uddin
相关产品推荐
相关产品推荐

