我需要一种方法来导出存储的变化到另一台计算机。

在1号电脑上我做到了

$ git stash save feature

我试图获得隐藏补丁到一个文件,然后将其导入到另一台计算机

$ git stash show -p > patch

这个命令给了我一个文件,我可以移动到另一台计算机上,这个回购是克隆的,但问题是如何将它作为一个存储再次导入。


当前回答

基于@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文件夹从一台计算机rsync到另一台计算机。Rsync只处理文件更改(比复制快)。

这种方法的一个缺点是配置也会被覆盖,如果在两台机器之间运行不同的.git配置,可能不希望出现这种情况。但是您可以通过在rsync中使用——exclude选项排除文件来克服这个问题。

总的来说,我认为原生Git解决方案更干净,但是这个rsync hack对于那些赶时间的人来说可能更熟悉rsync而不是Git。

如果您想将更改从一台机器移动到另一台机器,您可以始终在您的机器上提交更改,然后在他们的机器上进行软重置。

办公室

Git commit -m "-stash-"

厨房

git重置-软头~1

如何在SourceTree中导出Stash:

从你将要使用你的Stash的分支中创建一个新的分支“StashTransfer” 运用你的积蓄,并做出承诺 点击你的提交,并从它做一个补丁,把补丁文件与你。 转到不同的存储库,选择相同的父分支,你刚刚使用1) 操作/应用补丁,选择模式:修改工作副本文件,推送应用补丁 现在,您在当前的工作环境中有补丁未提交的修改 为当前的回购创建一个新的Stash

您可以在一台机器上创建补丁文件,然后可以将该补丁文件共享给另一台机器。

创建存储作为补丁

$ git stash show "stash@{0}" -p > changes.patch

“stash@{0}”是隐藏的引用。它将创建补丁文件与最新的stash。 如果你想要不同的,使用命令$ git stash list来查看你的存储列表,并选择你想要修补的一个。

应用补丁

现在,将存储文件转移到另一台机器上,并将其粘贴到项目的根文件夹中。 然后执行以下命令

$ git apply changes.patch

如果出现了错误,而你想要逆转更改

$ git apply changes.patch --reverse