Git stash 暂存你的更改(隐藏存储)
Git stash 暂存你的更改(隐藏存储)
一、Git Stash 概述
在开发的时候经常会遇到切换分支时需要你存储当前的更改,如果你暂时不想应用当前更改也不想放弃更改,那么你可以使用 git stash先将其隐藏存储,这样代码就会变成未修改的状态,等解决其他问题后,在将其隐藏的存储显示,就可以继续之前的工作了。
Git stash
是一个非常有用的 Git 命令,它允许你临时保存你的工作目录中的更改,而不会提交这些更改到 Git 仓库中。这在你需要切换分支处理其他任务,但当前分支上的工作尚未完成时特别有用。
当你执行 git stash 命令时,Git 会创建一个新的提交对象,该对象记录了工作目录的当前状态,以及当时 HEAD提交的状态。这个提交对象不会被分配到任何分支上,但可以通过 git stash list 命令查看。
二、Git Stash 命令的使用
Git stash 提供了多种操作来管理你的暂存更改。以下是一些常用的 Git stash 命令:
- 保存当前工作目录和索引的状态,然后将它们回滚到 HEAD(隐藏存储)
git stash push
或者可以简写为
git stash
你可以为 stash 提供一个带消息的存储,以便更容易地识别
git stash push -m "message"列出所有的 stash 条目
git stash list应用指定的 stash 条目到当前工作目录,但不从 stash 列表中删除它
git stash apply应用最近的 stash 条目,并从 stash 列表中删除它
git stash pop删除一个指定的 stash 条目
git stash drop清除所有的 stash 条目
git stash clear
三、示例
比如我现在有两个分支:
两个分支当前处于不同步的状态。
现在我在master分支有了修改:
然后有突发情况,需要切换到dev分支解决Bug
当两个分支不同步时,在VSCode中带着更改切换分支会出现以上提示:
- 强制迁出:是放弃当前更改
- 迁移更改:将当前更改迁移到切换的分支
- 存储并迁出:就是使用git stash 隐藏存储当前的更改
但是我现在不想将其更改应用,也不想放弃我的更改,此时我需要使用git stash.
为了使用命令演示,这里不借用VScode提供的可视化操作,实际上,熟悉使用命令后操作会更加快。
隐藏存储
git stash push -m 'message'
如果不需要附带消息 可以直接使用
git stash
隐藏后,已经看不到修改记录了,左侧更改的文件全部被隐藏。
现在就可以将分支自由切换了
查看隐藏的修改
git stash list
恢复隐藏存储
git stash pop
恢复上次存储,并删除该次隐藏存储
注意你可以在任何分支恢复,确保你当前在正确的分支‘
现在我切换到master分支,恢复我切换分支前的修改。
这里就恢复成功了,可以继续前面未完成的工作了。
四、注意事项
使用 stash 时,未跟踪的文件默认不会被保存。如果你想包含这些文件,可以使用 -u 或 --include-untracked 选项。
如果在应用 stash 时遇到冲突,stash 条目不会自动删除。你需要手动解决冲突并使用 git stash drop 来删除它。
如果你不小心删除了一个重要的 stash 条目,你可能需要使用一些高级 Git 命令来恢复它,例如 git fsck 和 git reflog。
当有多个stash 条目时,你可以通过git stash apply stash@{对应的条目},该命令应用后不会删除条目,如果你想应用后删除,可以使用git stash pop stash@{对应的条目}
Git stash 是一个强大的工具,可以帮助你管理工作目录中的更改,而不会影响 Git 仓库中的提交历史。正确使用 Git stash 可以使你的开发流程更加流畅和高效。