我需要一种方法来导出存储的变化到另一台计算机。
在1号电脑上我做到了
$ git stash save feature
我试图获得隐藏补丁到一个文件,然后将其导入到另一台计算机
$ git stash show -p > patch
这个命令给了我一个文件,我可以移动到另一台计算机上,这个回购是克隆的,但问题是如何将它作为一个存储再次导入。
我需要一种方法来导出存储的变化到另一台计算机。
在1号电脑上我做到了
$ git stash save feature
我试图获得隐藏补丁到一个文件,然后将其导入到另一台计算机
$ git stash show -p > patch
这个命令给了我一个文件,我可以移动到另一台计算机上,这个回购是克隆的,但问题是如何将它作为一个存储再次导入。
当前回答
您可以在一台机器上创建补丁文件,然后可以将该补丁文件共享给另一台机器。
创建存储作为补丁
$ git stash show "stash@{0}" -p > changes.patch
“stash@{0}”是隐藏的引用。它将创建补丁文件与最新的stash。 如果你想要不同的,使用命令$ git stash list来查看你的存储列表,并选择你想要修补的一个。
应用补丁
现在,将存储文件转移到另一台机器上,并将其粘贴到项目的根文件夹中。 然后执行以下命令
$ git apply changes.patch
如果出现了错误,而你想要逆转更改
$ git apply changes.patch --reverse
其他回答
原文中的启动命令:
git stash show -p stash@{x} > patch_file
对我不起作用(出于某种原因,它创建了不可用的补丁文件)。相反,我不得不:
git stash apply stash@{x}
git commit
我想转移的每一笔钱然后,我将'parent' repo放置在` child' repo:///范围内,并对每个stash提交执行以下操作:
git fetch file:///path_to_parent_git && git cherry-pick commit_sha
git reset --soft HEAD^
git stash save my_new_stash_on_child
这个更复杂,但对我来说很管用。
您可以在一台机器上创建补丁文件,然后可以将该补丁文件共享给另一台机器。
创建存储作为补丁
$ git stash show "stash@{0}" -p > changes.patch
“stash@{0}”是隐藏的引用。它将创建补丁文件与最新的stash。 如果你想要不同的,使用命令$ git stash list来查看你的存储列表,并选择你想要修补的一个。
应用补丁
现在,将存储文件转移到另一台机器上,并将其粘贴到项目的根文件夹中。 然后执行以下命令
$ git apply changes.patch
如果出现了错误,而你想要逆转更改
$ git apply changes.patch --reverse
基于@Chris Maes的回答
在repo root上运行这个NodeJS脚本可以为每个现有的存储创建一个补丁文件:
const fs = require('fs');
const cp = require('child_process');
try{
fs.mkdirSync('./stashes')
}catch(err){console.log("Folder stashes already exists")}
var stashes = cp.execSync("git stash list").toString().split('\n');
for(var stash of stashes){
var stashId = stash.split(":")[0];
var patchFilename = stash.replace(/[/\\?%*:,|" <>]/g, '_');
cp.execSync(`git stash show ${stashId} -p > ./stashes/${patchFilename}.patch`);
}
您可以通过简单地运行应用补丁文件(无需提交更改)
git apply patchfile
然后你可以简单地从当前工作目录创建一个新的存储:
git stash
如果您想将更改从一台机器移动到另一台机器,您可以始终在您的机器上提交更改,然后在他们的机器上进行软重置。
办公室
Git commit -m "-stash-"
厨房
git重置-软头~1