一、Git Stash是什么?
Git stash是一个非常有用的命令,它可以让你“储藏”当前的工作,并且自动切换到干净的工作目录。这个功能通常用于临时存储你的工作,以便你可以在切换分支或者处理其他问题时,随时返回到原来的状态。它可以保存未提交的代码,包括修改、暂存和未跟踪的文件。
二、如何使用Git Stash储藏?
使用“git stash”命令可以将所有未提交的修改(包括已暂存和未暂存的修改)保存到一个“储藏”中。
$ git stash
Saved working directory and index state WIP on master: 53c09c3 added the index file
HEAD is now at 53c09c3 added the index file
我们可以使用“git stash list”命令列出所有的储藏:
$ git stash list
stash@{0}: WIP on master: 53c09c3 added the index file
我们可以使用“git stash apply”命令,将储藏中的修改应用到当前分支,相当于恢复了之前被暂存的代码。我们也可以指定储藏的ID号来应用某个特定的储藏。如果不指定ID号,则默认使用最新的储藏来恢复。
$ git stash apply
# 等价于
$ git stash apply stash@{0}
如果你不想保留储藏,可以使用“git stash drop”命令。如果你希望应用一个储藏并且将其从列表中删除,可以使用“git stash pop”命令。
$ git stash drop stash@{0}
# 或者
$ git stash pop
三、如何使用Git Stash恢复被清理的Stash?
有时候我们可能会意外清理掉了自己储藏的内容,这时候我们需要用到另一个命令“git fsck”来检查是否有文件被清理过。在执行该命令之前,需要确定储藏遗失的提交ID。
$ git fsck --full --no-reflog
然后你应该看到一个类似下面这样的输出:
Checking object directories: 100% (256/256), done.
Checking objects: 100% (392/392), done.
broken link from tree d2de8bf97b21f2e74251e0a8facfbe7d9d4c3e5e
to blob 2fdea27ad5c5a54f0520d8e78621b1c9054cb5a9
broken link from tree 49fa1ad36b6e0a31b4c82015f9b4c59675aad2c2
to blob 2fdea27ad5c5a54f0520d8e78621b1c9054cb5a9
dangling commit ed961247cb59473b5ad7e0993f21da5f3b294de3
dangling commit 6d0153cd180afe4d5769c59acd176a2f72a187c7
这里的“dangling commit”中包括储藏的提交内容。我们可以使用“git show
$ git show ed961247cb59473b5ad7e0993f21da5f3b294de3
输出的信息中应该包括你想要恢复的内容。然后,我们可以使用“git cherry-pick”命令将这个提交应用到工作目录中:
$ git cherry-pick ed961247cb59473b5ad7e0993f21da5f3b294de3
四、如何使用Git Stash恢复未保存的修改?
有时我们可能会在工作目录中进行了一些修改但是并没有执行任何提交操作,这时候可以使用以下命令将这些修改储藏起来,以备后续恢复使用:
$ git stash save "message"
然后,我们可以使用“git stash list”命令查看所有的储藏列表:
$ git stash list
现在我们可以使用“git stash apply”命令来恢复储藏的内容:
$ git stash apply
# 或者应用某个特定的储藏
$ git stash apply stash@{2}
之后,我们可以继续在工作目录中进行修改或者提交操作。