我需要一种方法将存储的更改导出到另一台计算机。
在Computer1上我做了
$ git stash save feature
我正在尝试将存储补丁发送到文件,然后将其导入另一台计算机
$ git stash show -p > patch
这个命令给了我一个文件,我可以移动到另一台克隆这个repo的计算机,但问题是如何再次将它作为存储导入。
由于
答案 0 :(得分:254)
您只需运行
即可应用补丁文件(尚未提交更改)git apply patchfile
然后,您只需从当前工作目录中创建一个新存储:
git stash
答案 1 :(得分:14)
或者你可以使用
从你的藏匿处(在计算机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 cherry-pick --no-commit。
如果您在computer1和computer2之间没有直接连接;你可以使用遥控器(如github或类似的东西):
git push origin stashed_changes_branch
并在计算机2上:
git fetch
答案 2 :(得分:14)
您可以从一台计算机上创建隐藏文件作为补丁文件,然后可以将该补丁文件共享给另一台计算机。
创建存储为补丁
$ git stash show "stash@{0}" -p > changes.patch
“存储@ {0}”是存储的参考。它将创建具有最新存储的补丁文件。
如果您要使用其他命令,请使用命令$ git stash list
查看存储的列表,然后选择要修补的存储。
应用补丁
现在将存储的文件转移到另一台计算机上,并将其粘贴到项目的根文件夹中。 然后运行此命令
$ git apply changes.patch
如果有错误,您想撤消更改
$ git apply changes.patch --reverse
答案 3 :(得分:9)
或者,您可以将整个本地存储器导出到另一个计算器,如下所示
git pull
,以确保两者都有最新的更改。答案 4 :(得分:3)
另一个选项是rsync
.git
文件夹从一台计算机到另一台计算机。 rsync
仅处理文件更改(比副本更快)。
这种方法的一个缺点是配置也会被覆盖,如果你在两台机器之间运行不同的.git配置,这可能是不可取的。但您可以通过在--exclude
中使用rsync
选项排除文件来解决此问题。
总体而言,我认为原生Git解决方案更干净,但这个rsync
黑客对于匆忙可能比git更熟悉rsync的人来说可能会很好。
答案 5 :(得分:1)
如何在SourceTree中导出存储:
1)从要使用Stash的分支中新建一个分支“ StashTransfer”
2)将您的存储区应用于该存储区并进行提交
3)单击您的提交并对其进行补丁,然后将补丁文件随身携带。
4)转到其他存储库,选择您在1)中刚刚使用的同一个父分支
5)操作/应用补丁,选择模式:修改工作副本文件,按应用补丁 现在您在当前的工作环境中尚未对补丁进行修改
6)为当前回购创建新的存储
赢!
答案 6 :(得分:1)
存储是基本提交和索引之间工作树的特殊合并提交。一种方法是将每个保存为单独的补丁,签出隐藏的第一个父项,从两个补丁中恢复索引和工作树,最后恢复隐藏(似乎有一个答案是这样的)。
这是从存储中完全重新创建所有信息所必需的,如果您不关心该信息,则至少应在恢复之前签出存储的第一父级,以避免冲突并跟踪存储的创建位置。
这是我将所有存储从一个存储库完全还原到另一个存储库的工作。如果您不能将它们存储在同一台计算机上,则可以在创建它们后将存储标签保存在捆绑软件中,然后将引用列表复制并捆绑到目标计算机。
从原始存储库的根开始:
stash_
+数字)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不支持stash_$((i++))
${param//pattern}
现在在新的回购中,每个引用:
for ref in $refs; do git fetch $oldpath $ref; git stash store -m "$(git show -s --pretty=%s $ref)" $ref; done
答案 7 :(得分:0)
来自原始帖子的启动命令:
git stash show -p stash@{x} > patch_file
对我不起作用(由于某种原因,它创建了无法使用的补丁文件)。相反,我不得不:
git stash apply stash@{x}
git commit
我要转移的每个藏匿处。然后,我放置了父母的父母。在文件中的repo:///'孩子的范围' repo,并为每个存储提交执行以下操作:
git fetch file:///path_to_parent_git && git cherry-pick commit_sha
git reset --soft HEAD^
git stash save my_new_stash_on_child
这个比较复杂,但对我来说很有把握。
答案 8 :(得分:0)
如果要将更改从一台计算机移至另一台计算机,则可以始终在计算机上提交更改,然后在其计算机上进行软重置。
办公室
git commit -m "-stash-"
厨房
git reset --soft HEAD~1
答案 9 :(得分:0)
git --no-pager stash show -p > patch
将隐藏的更改复制到补丁文件
git apply path/to/the/patch/file
应用补丁文件中的存储
以下 shell 脚本允许用户将所有隐藏文件从一个文件夹复制到另一个文件夹。 https://gist.github.com/senthilmurukang/29b55a0c0e8694c406991799153f3c43