- 我有未提交的工作
- 我需要切换到另一个分支进行紧急工作
- 由于我当前的进行中的工作尚未完成,我不想提交它。我使用
git stash
将其放在一边。
此外,我希望将该存储的内容备份到共享驱动器上,只是为了安全起见。有什么优雅的解决方案可以将存储的内容归档到文件上?
git stash
将其放在一边。此外,我希望将该存储的内容备份到共享驱动器上,只是为了安全起见。有什么优雅的解决方案可以将存储的内容归档到文件上?
通过运行show命令,您可以获得差异:
git stash show -p > stash.diff
这是差异文件,您可以将其用作备份。
稍后您可以将差异应用于现有仓库:
git apply stash.diff
# and potentially stash again:
git stash
我不想提交它
实际上,git stash
操作是通过进行两个(有时是三个)提交来完成的,因此如果您储存了工作内容,则可能会在不知情的情况下进行提交。但是,大多数时候暂时提交并没有什么问题。只需添加当前的工作内容,然后通过以下方式进行临时提交:
git commit -m 'WIP'
然后,您可以将您的分支推送到代码库,这将作为备份。当您回来完成工作时,可以通过以下方式修改该临时提交:
git commit --amend
请随意将此消息更改为更有意义的内容,但无论如何,WIP
消息都可以作为提醒。
如果您正在使用的分支可能会被其他人共享,则可以将带有临时提交的分支推送到不同的位置作为备份,例如:
git push origin local_branch:some_other_location
git commit --amend
,@Tim,有没有一种临时的方法可以通过电子邮件之类的方式在另一台机器上共享并提交? - Vinay Veluri扩展Zybnek的答案。
如果您想备份所有存储区内容,而不需要进行提交或创建临时分支:
计算存储区数目 git stash list | wc -l
执行for i in {0..n}; do $(git stash show -p stash@{$i} > stash_$i.diff); done
正如Tim Biegeleisen所说,git stash
实际上创建了一个提交 - 它只是不移动任何分支。
您可以通过stash@{0}
访问您最后的存储内容(通过stash@{1}
访问倒数第二个等等...使用git stash list
查看您可以访问的完整列表)。
我认为使存储更持久的最简单方法是:创建一个新分支:
$ git branch wip/adding/new/feature stash@{0}
$ cd path/to/external/drive
$ git clone my/repo
# you can then update your backup by running :
$ git fetch # from the clone
我通过以下方式成功备份了一个存储(Git Extensions使用的文件和路径):
要恢复文件,请将您之前备份的文件复制回上述文件夹中。之后,您可以通过Git Extensions使用该存储。
/tmp
。两全其美。
git stash show
只是简单地显示 "MyProject/MyFile.scala | 34 +++++",表示有一个文件改动,增加了34行。如果我备份这个“状态报告”(根据您的指示,它被保存在stash.diff中),然后假设我的硬盘在备份之后出现问题,那么stash.diff如何知道我在MyFile.scala文件中实际写入的这34行内容? - Polymerase-p
选项真的很酷。你完美地回答了我最初的问题。 - Polymerase