我需要一种方法将存储的更改导出到另一台计算机.
在Computer1上我做到了
$ git stash save feature
Run Code Online (Sandbox Code Playgroud)
我正在尝试将存储补丁发送到文件,然后将其导入另一台计算机
$ git stash show -p > patch
Run Code Online (Sandbox Code Playgroud)
这个命令给了我一个文件,我可以移动到另一台克隆这个repo的计算机,但问题是如何再次将它作为存储导入.
谢谢
pok*_*oke 272
您只需运行即可应用补丁文件(无需提交更改)
git apply patchfile
Run Code Online (Sandbox Code Playgroud)
然后,您只需从当前工作目录中创建一个新的存储:
git stash
Run Code Online (Sandbox Code Playgroud)
Sim*_*ran 39
您可以从一台机器创建 stash 作为补丁文件,然后可以将该补丁文件共享到另一台机器。
将存储创建为补丁
$ git stash show "stash@{0}" -p > changes.patch
Run Code Online (Sandbox Code Playgroud)
“stash@{0}”是 stash 的 ref。它将使用最新的 stash 创建补丁文件。如果您想要不同的使用命令$ git stash list
来查看您的隐藏列表并选择您要修补的一个。
应用补丁
现在将该存储转移到另一台机器并将其粘贴到项目的根文件夹中。然后运行这个命令
$ git apply changes.patch
Run Code Online (Sandbox Code Playgroud)
如果有错误并且您想撤销更改
$ git apply changes.patch --reverse
Run Code Online (Sandbox Code Playgroud)
Chr*_*aes 15
或者,您可以使用存储(在计算机1上)创建分支
git stash branch stashed_changes_branch
Run Code Online (Sandbox Code Playgroud)
提交您的更改:
git commit -a
Run Code Online (Sandbox Code Playgroud)
然后将其添加为计算机2上的遥控器:
git remote add pc1 user@computer1:/path/to/repo
Run Code Online (Sandbox Code Playgroud)
现在您可以使用检索远程信息
git fetch pc1
Run Code Online (Sandbox Code Playgroud)
现在你可以按照你想要的方式导入提交; 使用git cherry-pick,git rebase或任何你喜欢的...如果你想让它看起来像你刚刚做了git stash apply ; 你可以使用git cherry-pick --no-commit.
如果你在computer1和computer2之间没有直接连接; 你可以使用遥控器(如github或类似的东西):
git push origin stashed_changes_branch
Run Code Online (Sandbox Code Playgroud)
并在计算机2上:
git fetch
Run Code Online (Sandbox Code Playgroud)
sha*_*eeq 13
或者,您可以将整个本地存储器导出到另一个计算器,如下所示
git pull
在旧的和新的git目录上,以确保两者都有最新的更改.Tho*_*est 13
存储是工作树在基本提交和索引之间的特殊合并提交。一种方法可能是将每个补丁保存为单独的补丁,检查存储的第一个父级,从两个补丁恢复索引和工作树,最后恢复存储(似乎有一个答案是这样的)。
这是从存储中完全重新创建所有信息所必需的,如果您不关心这一点,您至少应该在恢复之前检查存储的第一个父级,以避免冲突并跟踪存储的创建位置。
这就是我将所有存储从一个存储库完全恢复到另一个存储库所做的事情。如果您无法将它们放在同一台计算机上,则可以在创建它们后将存储标签保存在捆绑包中,并将引用列表和捆绑包复制到目标计算机。
从原始存储库的根目录:
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
Run Code Online (Sandbox Code Playgroud)
注意:这需要 bash 或兼容的 shell(ksh、zsh 应该做...)您也可以增加一个变量,例如,stash_$((i++))
如果您的 shell 不支持${param//pattern}
现在在新的存储库中,对于每个参考:
for ref in $refs; do git fetch $oldpath $ref; git stash store -m "$(git show -s --pretty=%s $ref)" $ref; done
Run Code Online (Sandbox Code Playgroud)
另一种选择是将rsync
文件.git
夹从一台计算机转移到另一台计算机。 rsync
仅处理文件更改(比副本更快)。
这种方法的一个缺点是配置也会被覆盖,如果您在两台计算机之间运行不同的 .git 配置,这可能是不需要的。--exclude
但是您可以通过使用 中的选项排除文件来克服这个问题rsync
。
总的来说,我认为原生 Git 解决方案更干净,但rsync
对于那些匆忙的人来说,这个 hack 可能会很好,因为他们可能比 git 更熟悉 rsync。
小智 7
git --no-pager stash show -p > patch
将隐藏的更改复制到补丁文件中
git apply path/to/the/patch/file
应用补丁文件中的隐藏内容
以下 shell 脚本允许用户将所有存储从一个文件夹复制到另一个文件夹。 https://gist.github.com/sentilmurukang/29b55a0c0e8694c406991799153f3c43
小智 6
原帖中的启动命令:
git stash show -p stash@{x} > patch_file
Run Code Online (Sandbox Code Playgroud)
对我不起作用(由于某种原因它创建了无法使用的补丁文件)。相反,我必须:
git stash apply stash@{x}
git commit
Run Code Online (Sandbox Code Playgroud)
对于我想转移的每个藏品。然后,我将“父”存储库放置在“子”存储库的 file:/// 范围内,并对每个存储提交执行以下操作:
git fetch file:///path_to_parent_git && git cherry-pick commit_sha
git reset --soft HEAD^
git stash save my_new_stash_on_child
Run Code Online (Sandbox Code Playgroud)
这更复杂,但对我来说很有效。
将您的藏匿处应用到它并进行提交
单击您的提交并从中制作补丁,随身携带补丁文件。
转到不同的存储库,选择您刚刚在 1) 中使用的同一父分支
操作/应用补丁,选择模式:修改工作副本文件,推送应用补丁,现在您在当前工作环境中对补丁进行了未提交的修改
为当前的 repo 创建一个新的 Stash