我需要一种方法来导出存储的变化到另一台计算机。
在1号电脑上我做到了
$ git stash save feature
我试图获得隐藏补丁到一个文件,然后将其导入到另一台计算机
$ git stash show -p > patch
这个命令给了我一个文件,我可以移动到另一台计算机上,这个回购是克隆的,但问题是如何将它作为一个存储再次导入。
我需要一种方法来导出存储的变化到另一台计算机。
在1号电脑上我做到了
$ git stash save feature
我试图获得隐藏补丁到一个文件,然后将其导入到另一台计算机
$ git stash show -p > patch
这个命令给了我一个文件,我可以移动到另一台计算机上,这个回购是克隆的,但问题是如何将它作为一个存储再次导入。
当前回答
或者,你可以复制整个本地存储(+其他本地分支,本地标签等)到另一台计算机,如下所示:
git拉出你的旧目录和新目录,以确保它们都有最新的更改(或者使用git reset—hard commit-hash确保两个回购都有相同的HEAD)。 将.git文件夹从旧的git目录复制到新的存储库
其他回答
如果您想将更改从一台机器移动到另一台机器,您可以始终在您的机器上提交更改,然后在他们的机器上进行软重置。
办公室
Git commit -m "-stash-"
厨房
git重置-软头~1
您可以通过简单地运行应用补丁文件(无需提交更改)
git apply patchfile
然后你可以简单地从当前工作目录创建一个新的存储:
git stash
隐藏是工作树在基本提交和索引之间的特殊合并提交。一种方法是将每个补丁保存为单独的补丁,签出stash的第一个父补丁,从两个补丁中恢复索引和工作树,最后恢复stash(似乎有一个答案是这样的)。
这是完全重新创建存储中的所有信息所需要的,如果您不关心这一点,那么至少应该在恢复之前签出存储的第一个父节点,以避免冲突,并跟踪创建存储的位置。
这就是我所做的从一个回购到另一个完全恢复所有存储。如果你不能将它们放在同一台计算机上,你可以在创建它们后将stash标签保存在一个包中,并将refs列表和包复制到目标计算机。
源于原回购的根源:
拿到藏货的名单 标记你的隐藏引用,这样你就可以用git fetch来检索它们(标记名称不重要,如果有冲突就更改它。我使用stash_ +数字(s)在逻辑stash ref) 将逻辑引用以相反的顺序转换为sha1哈希值——我们稍后将使用它们 保存该回购路径-也为以后使用
refs=$(git stash list|cut -d: -f1)
for ref in $refs; do git tag stash_${ref//[^0-9]} $ref; done
refs=$(git rev-parse $refs|tac)
oldpath=$PWD
注意:这需要bash或兼容shell (ksh, zsh应该做…)如果你的shell不支持${param//pattern},你也可以增加一个变量,ex stash_$((i++))
现在在新的repo中,对于每个ref:
从旧的repo中获取ref(我们甚至不需要使用标记名称,因为我们已经标记了它们,我们可以用git Fetch检索它们) 从ref重新导入stash,使用该ref的主题作为stash消息。
for ref in $refs; do git fetch $oldpath $ref; git stash store -m "$(git show -s --pretty=%s $ref)" $ref; done
您可以在一台机器上创建补丁文件,然后可以将该补丁文件共享给另一台机器。
创建存储作为补丁
$ git stash show "stash@{0}" -p > changes.patch
“stash@{0}”是隐藏的引用。它将创建补丁文件与最新的stash。 如果你想要不同的,使用命令$ git stash list来查看你的存储列表,并选择你想要修补的一个。
应用补丁
现在,将存储文件转移到另一台机器上,并将其粘贴到项目的根文件夹中。 然后执行以下命令
$ git apply changes.patch
如果出现了错误,而你想要逆转更改
$ git apply changes.patch --reverse
或者,您可以从您的存储(在计算机1上)创建一个分支,使用
git stash branch stashed_changes_branch
提交您的更改:
git commit -a
然后在计算机2上添加它作为遥控器:
git remote add pc1 user@computer1:/path/to/repo
现在您可以使用
git fetch pc1
现在你可以以你想要的方式导入提交;使用git cherry-pick, git rebase或任何你喜欢的… 如果你想让它看起来像git stash apply;你可以选择使用git——不提交。
如果在computer1和computer2之间没有直接连接;你可以使用一个远程(如github或类似的东西):
git push origin stashed_changes_branch
在计算机2上:
git fetch