git stash 用于临时保存未提交改动。
它适合处理“我手上有未完成代码,但现在必须切分支、拉代码、修 hotfix”的场景。
git stash push -u 会保存并从当前工作区移走所有已跟踪的 staged、unstaged 内容和未跟踪文件。先检查范围:
git status --porcelain
只在这些内容都属于自己、并且准备稍后恢复时使用。状态中有其他 owner 的编辑或来源不清的文件时,停止在这个 worktree 操作,改用独立 worktree。
保存当前改动,包括未跟踪文件:
git stash push -u -m "wip: describe current work"
查看 stash 列表:
git stash list
应用某个 stash,但保留 stash 记录:
git stash apply stash@{0}
应用并删除 stash:
git stash pop
删除某个 stash:
git stash drop stash@{0}
重要改动优先用 apply。
pop 会在应用成功后删除 stash,如果应用过程中出现冲突,处理起来更容易慌。
稳妥流程:
git stash apply stash@{0}
git status
git diff
git diff --cached
git stash drop stash@{0}
确认 staged、unstaged 和未跟踪内容都已按预期恢复后,才执行 git stash drop;不能只因 apply 返回成功就删除保存点。
stash 适合临时保存,不适合长期保存重要工作。
重要工作应该尽快 commit 到明确分支。
默认 git stash 不一定保存未跟踪文件,建议使用:
git stash push -u
stash 多了之后很难知道每个保存点是什么。
建议每次加 -m 说明用途。