如何备份git stash内容?

时间:2017-02-21 04:02:53

标签: git

  • 我有未决的未提交作品
  • 我需要切换到另一个分支机构进行一些紧急工作
  • 由于我目前正在进行的工作尚未完成,我不想提交。我使用git stash将它放在一边。

此外,我想在共享驱动器上备份该存储内容。只是为了安全。将存储内容归档到文件中的优雅解决方案是什么?

4 个答案:

答案 0 :(得分:13)

您可以通过运行show命令来获取diff:

git stash show -p > stash.diff

这是可以用作备份的diff文件。

稍后您可以将diff应用于现有存储库:

git apply stash.diff
# and potentially stash again:
git stash

答案 1 :(得分:5)

  

我不想提交

实际上,git stash通过两次提交(有时)三次来进行操作,所以如果你把你的工作藏起来,你甚至可能都不知道它。但是大多数时候做出临时提交并没有错。只需添加当前的工作,然后通过以下方式进行临时提交:

git commit -m 'WIP'

然后,您可以将分支推送到存储库,这应该用作备份。当您返回完成工作时,您可以通过以下方式修改该临时提交:

git commit --amend

随意将邮件更改为更有意义的邮件,但无论如何WIP邮件都可以作为提醒。

如果您正在处理的分支可以由其他人共享,那么您可以将临时提交的分支推送到不同的位置作为备份,例如。

git push origin local_branch:some_other_location

答案 2 :(得分:2)

正如Tim Biegeleisen所说,git stash实际上创建了一个提交 - 它只是不会移动任何分支。

您可以通过stash@{0}访问上次隐藏的内容(倒数第二个到stash@{1}等等... git stash list以查看您可以访问的完整列表。< / p>

我认为使存储更持久的最直接方式是:创建一个新分支:

$ git branch wip/adding/new/feature stash@{0}

现在,有一个分支指向它,这个隐藏的内容将不会过期,将在您从此repo克隆或获取等时传输...

备份回购的最简单方法是克隆它:

$ cd path/to/external/drive
$ git clone my/repo

# you can then update your backup by running :
$ git fetch         # from the clone

这将保存原始仓库中定义的所有分支和标签。

答案 3 :(得分:0)

扩展 Zybnek 的回答。

如果您想在不提交或创建临时分支的情况下备份所有存储:

  1. 计算隐藏的数量git stash list | wc -l

  2. 执行for i in {0..n}; do $(git stash show -p stash@{$i} > stash_$i.diff); done