Git Stash 用法小结
git stash
是 Git 中一个非常有用的命令,用于将当前工作目录和暂存区的更改保存起来,以便在将来恢复。这对于暂时中断当前工作、切换到其他任务,或者在未提交更改的情况下切换分支特别有用。git stash
让你能够在不丢失当前工作进度的情况下,干净地切换工作环境。
1. 基本命令
1.1 git stash
将当前工作目录和暂存区的更改保存到一个栈中,并将工作目录恢复为上次提交的状态。
git stash
默认情况下,git stash
会将已修改的文件(包括暂存区的更改)保存到 Git 的栈中,并将工作目录恢复到最近一次提交的状态。
1.2 git stash save "message"
将更改保存并附加一个自定义消息,方便后续区分不同的 stash。
git stash save "work in progress"
1.3 git stash list
查看当前所有的 stash 记录,显示每个 stash 的标识符和附加的描述信息。
git stash list
输出类似:
stash@{0}: WIP on master: 3fdde9a fix: update readme
stash@{1}: WIP on feature-branch: 2b1b94a add new feature
1.4 git stash apply
恢复最近保存的 stash,但是不删除 stash 记录(即可以再次使用该记录)。
git stash apply
如果你想恢复特定的 stash,可以指定它的编号:
git stash apply stash@{1}
1.5 git stash pop
恢复并删除最近的 stash,通常用于你已经处理完暂存的更改并不再需要这个 stash 的时候。
git stash pop
你也可以指定特定的 stash 来恢复并删除:
git stash pop stash@{1}
1.6 git stash drop
删除特定的 stash,而不恢复它。
git stash drop stash@{0}
1.7 git stash clear
删除所有的 stash 记录,清空 stash 栈。
git stash clear
2. 进阶用法
2.1 git stash show
查看最近 stash 的更改内容概要。
git stash show
如果你想查看更详细的更改,可以加上 -p
参数:
git stash show -p
2.2 git stash save --keep-index
保存暂存区的更改,但是保留已暂存的文件不变。
git stash save --keep-index
这个命令会将所有未暂存的更改保存到 stash 栈中,但暂存区的文件不会受到影响。
2.3 git stash save --include-untracked
或 git stash -u
保存包括未跟踪(untracked)文件在内的所有更改。
git stash save --include-untracked
或者简写为:
git stash -u
这样,除了已修改的文件,Git 还会把未跟踪的文件(如新创建的文件)也保存到 stash 中。
2.4 git stash save --all
或 git stash -a
保存包括忽略文件(ignored files)在内的所有更改。
git stash save --all
或者简写为:
git stash -a
此命令会把包括 .gitignore
中的忽略文件也保存起来。
3. 常见场景
3.1 在工作中断时暂存更改
你正在开发一个特性,突然需要切换到其他任务。可以使用 git stash
暂存当前更改,切换到其他分支,完成紧急任务后,再返回并恢复之前的工作。
git stash
git checkout other-branch
# 完成工作后
git checkout feature-branch
git stash pop
3.2 清理当前工作区
你暂时想将当前更改清理干净,以便进行其他操作,但不想丢失这些更改。通过 git stash
,你可以暂存当前更改并恢复工作目录到最后一次提交的状态。
git stash
# 执行其他操作
git stash pop
3.3 遇到合并冲突时使用 stash
在合并分支时遇到冲突,你可以暂存当前更改,解决冲突后再恢复之前的更改。
git stash
git merge feature-branch
# 解决冲突后
git stash pop
3.4 在提交前保存当前更改
有时候你还不想提交当前的更改,但需要暂时切换分支。你可以使用 git stash
来保存这些更改,切换分支后再继续工作。
git stash save "feature X work in progress"
git checkout master
# 处理其他任务
git checkout feature-X
git stash pop
4. 小结
- 保存更改:
git stash
将未提交的更改保存到栈中。 - 恢复更改:使用
git stash apply
或git stash pop
恢复保存的更改。 - 查看 stash 记录:使用
git stash list
查看所有已保存的 stash。 - 删除 stash 记录:使用
git stash drop
删除单个 stash,使用git stash clear
清空所有记录。 - 包括未跟踪文件:
git stash -u
或git stash save --include-untracked
会保存未跟踪的文件。
git stash
是一个非常强大的工具,尤其在你需要频繁切换任务或处理中断的工作时,它可以帮助你灵活地管理工作进度,而不必频繁提交。
发表回复