如何备份git stash内容?

bogh5gae  于 2023-01-24  发布在  Git
关注(0)|答案(6)|浏览(180)
  • 我有未完成的工作
  • 我需要转到另一个分支处理一些紧急的工作
  • 由于我当前的工作未完成,我不想提交它。我使用git stash将其放在一边。

此外,我想备份隐藏的内容在一个共享驱动器上。只是为了安全。什么是优雅的解决方案来存档隐藏的内容在文件上?

zzlelutf

zzlelutf1#

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

git stash show -p > stash.diff

这是您可以用作备份的diff文件。
稍后,您可以将差异应用到现有存储库:

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

stszievb2#

我不想犯
实际上,git stash通过提交两次(有时是三次)来运行,所以如果你隐藏了你的工作,你可能在不知道的情况下提交了。但是大多数时候临时提交并没有什么错。只需添加你当前的工作,然后通过以下方式进行临时提交:

git commit -m 'WIP'

然后,你可以将分支推送到仓库,这可以作为一个备份。当你回来完成工作时,你可以通过以下方式修改临时提交:

git commit --amend

您可以随意将消息更改为更有意义的内容,但在任何情况下,WIP消息都可以作为提醒。
如果您正在处理的分支可以被其他人共享,那么您可以将您的分支与临时提交一起推送到不同的位置作为备份,例如:

git push origin local_branch:some_other_location
qzwqbdag

qzwqbdag3#

正如Tim Biegeleisen所说,git stash实际上创建了一个提交--它只是不移动任何分支。
你可以通过stash@{0}访问你最后一次隐藏的内容(倒数第二次通过stash@{1}等... git stash list查看你可以访问的内容的完整列表)。
我认为最直接的方法是让储藏更持久:创建一个新分支:

$ 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

这将保存所有分支和标签定义在你的原始repo.

sbdsn5lh

sbdsn5lh4#

扩展了齐布内克的答案。
如果你想备份所有的stashes而不提交或者创建临时分支:
1.计算藏匿数量git stash list | wc -l
1.执行for i in {0..n}; do $(git stash show -p stash@{$i} > stash_$i.diff); done

q0qdq0h2

q0qdq0h25#

我通过以下操作成功地备份了一个隐藏文件(Git扩展使用的文件和路径):

  • 复制位于git\refs的“stash”文件
  • 复制位于git\logs\refs的“stash”文件
  • 从git\objects复制所有文件夹(除了文件夹“info”和“pack”)

要恢复这些文件,请将您备份过的文件复制到上面提到的文件夹中。之后,您就可以通过Git扩展使用这些文件了。

z9zf31ra

z9zf31ra6#

另一个解决方案是在另一个时间将存储库克隆到磁盘上的另一个位置,例如/tmp
这样,你就可以勾选上面的所有方框,你就不必隐藏任何东西。
两全其美。

相关问题