Git Stash——拯救纠结伦的你
Git Stash 命令详解
前言:
从前,开发的新功能存在思绪未理清的情况,又需要拉取项目最新修改时,十分纠结,不想立即commit又想保证代码不丢失。后来,我了解到GIt 有一个神奇的命令——git stash,有了它,妈妈再也不用担心我的代码暂存问题了。
简介:
git stash 是 Git 的一个强大命令,允许你在当前工作目录的未提交更改(暂存区中的更改和未暂存的更改)中“藏起来”,以便稍后恢复它们。 这非常适合在需要切换分支、修复错误或进行其他任务时,临时保存你的工作,而无需进行提交。
1. 基本用法
git stash或git stash push: 将当前工作区和暂存区的更改保存到一个名为 "stash" 的列表中。 默认情况下,所有未暂存的更改都将被保存,但暂存的更改不会被保存(除非你使用选项)。git stash list: 列出当前 stash 列表。 每个 stash 都会有一个唯一的 ID (例如stash@{0}),以及描述性名称 (通常是提交哈希)。git stash apply stash@{0}: 将stash@{0}(第一个 stash) 恢复到工作目录,同时将该 stash 从 stash 列表中移除。stash@{0}通常指第一个创建的 stash。git stash apply: 将最新的 stash 恢复到工作目录,并将其从 stash 列表中移除。 如果存在多个 stash,则会应用最新的一个。git stash pop: 将最新的 stash 恢复到工作目录,并将该 stash 从 stash 列表移除。 这是一个常用的git stash命令之一。git stash drop stash@{0}: 删除stash@{0}(第一个 stash) 。 小心使用!git stash drop: 删除最新的 stash。git stash clear: 删除所有 stash。
2. 选项 (Flags)
-u或--include-untracked: 包含未跟踪的文件。 默认情况下,git stash不保存未跟踪的文件。-k或--keep-index: 只保存工作区中的更改,而不保存暂存区中的更改。 这对于只保存未提交的更改而保持暂存区不变非常有用。-it或--include-untracked --keep-index: 同时包含未跟踪的文件和只保存工作区中的更改。-m <message>或--message <message>: 指定 stash 的消息。 建议使用此选项为每个 stash 添加一个有意义的描述。-p或--patch: 交互式地选择要保存哪些更改。 这允许你精细地控制哪些更改被保存到 stash 中。 这个选项会打开一个 diff 编辑器,允许你选择要保存的更改行。--attach-message=<message>: 在创建 stash 时自动添加指定的消息。 通常与-m选项一起使用。
3. 高级用法
git stash create: 创建一个新的 stash,但不会立即将其应用到工作目录。 这个命令主要用于在脚本或自定义命令中使用。git stash branch <branchname>: 创建一个新分支,并应用最新的 stash。 这个新的分支会包含 stash 中保存的更改。 然后这个新分支就会被丢弃。
4. 注意事项
- Stash 是本地的: Stash 存储在你的本地 Git 仓库中,不会被共享到其他仓库。
- Stash 并不是提交: Stash 只是你更改的快照,并不是提交。 这意味着它不包含提交信息,你仍然需要进行提交才能将更改保存到版本控制历史中。
- Stash 可能会变得复杂: 如果使用
git stash命令进行多次应用和删除操作,stash 列表可能会变得非常复杂。 因此,建议为每个 stash 添加一个描述性消息,并定期清理 stash 列表。 - Stash 解决冲突: 当你应用 stash 时,可能会遇到冲突。 你需要手动解决这些冲突,就像解决普通提交冲突一样。
5. 示例流程
- 修改文件: 你正在进行一些开发工作,对一些文件进行了修改。
- 保存更改: 你不想提交这些修改,因为你正在尝试解决一个问题,并且可能需要回滚。
- 使用
git stash: 你可以使用git stash push -m "WIP: Feature X"命令将这些修改保存到 stash 中。 - 切换分支: 现在你可以安全地切换到另一个分支进行工作,或者修复一个错误。
- 恢复更改: 在完成后,你可以使用
git stash pop命令将 stash 中保存的更改恢复到你的工作目录。
参考资源:

浙公网安备 33010602011771号