Git Stash 常见用法
git stash
是一个非常有用的命令,可以帮助你临时保存当前工作区的更改,以便在未来恢复。这在处理多个任务、临时中断工作或切换分支时非常有用。下面是一些常见的 git stash
用法,帮助你更高效地管理和利用这个功能。
1. 临时保存工作
1.1 保存当前更改
如果你在工作中间需要切换分支或处理其他任务,但又不想丢失当前的工作进度,可以使用 git stash
将未提交的更改保存起来,并恢复到上次提交的干净状态。
git stash
这会把你当前工作区(包括暂存区和未暂存区)的修改保存起来,工作区会恢复为最近一次提交的状态。
1.2 保存并附加描述
你可以在保存时为当前的更改添加自定义描述,帮助以后识别这个 stash。
git stash save "WIP: Add new feature X"
这样,你就可以在后续查看 stash 列表时,知道这是针对“新特性 X”所做的工作。
2. 查看、恢复和删除 Stash
2.1 查看所有 Stash 记录
使用 git stash list
查看所有保存的 stash。
git stash list
输出示例:
stash@{0}: WIP on master: 3fdde9a fix: update README
stash@{1}: WIP on feature-branch: 2b1b94a add login page
2.2 查看 Stash 的具体内容
如果你想查看某个 stash 记录的具体内容,可以使用 git stash show
。默认会显示文件的简要改动,如果要查看更详细的差异,可以加上 -p
选项。
git stash show stash@{0}
如果你想查看更详细的修改内容:
git stash show -p stash@{0}
2.3 恢复最近的 Stash
恢复并保留 stash 记录的内容,使用 git stash apply
。这会将最近的 stash 应用到当前工作目录,但不会删除 stash 记录。
git stash apply
如果你要恢复特定的 stash,可以指定其编号:
git stash apply stash@{1}
2.4 恢复并删除 Stash
如果你恢复了某个 stash 后不再需要它,可以使用 git stash pop
,此命令会恢复并自动删除该 stash。
git stash pop
指定恢复并删除特定的 stash:
git stash pop stash@{0}
2.5 删除特定的 Stash
如果你希望删除某个 stash,而不恢复它,可以使用 git stash drop
:
git stash drop stash@{0}
2.6 清空所有 Stash 记录
如果你不再需要任何 stash,可以清空所有 stash 记录:
git stash clear
3. 高级用法
3.1 保存未跟踪的文件
默认情况下,git stash
只会保存已跟踪的文件的更改。如果你想将未跟踪的文件(例如新建的文件)也一并保存,可以使用 -u
或 --include-untracked
参数:
git stash -u
或者:
git stash save --include-untracked
这会把所有的修改,包括未跟踪的文件,也存储到 stash 中。
3.2 保存包括忽略文件
如果你还想保存 .gitignore
中被忽略的文件,可以使用 -a
或 --all
参数:
git stash -a
或者:
git stash save --all
这会将所有的修改(包括忽略文件)一起保存。
3.3 只保存暂存区的更改
有时候你可能只想保存暂存区(staged changes)的更改,而不包括工作区的更改,可以使用 --keep-index
参数:
git stash save --keep-index
这会将所有未暂存的文件保存到 stash 中,但保留暂存区的文件不变。
3.4 临时清理工作区
你可以先暂存当前的工作进度,清理工作区,进行一些其他操作后再恢复:
git stash
git checkout other-branch
# 其他操作
git checkout feature-branch
git stash pop
3.5 使用多个 Stash
如果你有多个 stash 需要管理,可以使用 git stash list
来查看并选择你需要的 stash 进行恢复或删除。每个 stash 都有一个编号(例如 stash@{0}
,stash@{1}
等)。
4. 常见场景
4.1 切换分支时保留当前更改
你正在开发一个新特性,但是在未完成的情况下需要切换到其他分支。可以使用 git stash
保存当前更改,切换分支后再恢复:
git stash
git checkout other-branch
# 完成其他任务后
git checkout feature-branch
git stash pop
4.2 临时中断工作
你正在进行一个较大的修改,突然需要暂停并处理另一个紧急任务。你可以将未完成的工作保存到 stash,切换到处理紧急任务的分支,完成后再恢复。
git stash
git checkout hotfix-branch
# 完成紧急修复后
git checkout feature-branch
git stash pop
4.3 合并冲突时的 stash 使用
在合并分支时遇到冲突,你可以先暂存当前的更改,解决冲突后再恢复之前的修改。
git stash
git merge feature-branch
# 解决冲突后
git stash pop
5. 总结
git stash
是一个非常有用的工具,适用于以下情况:
- 暂时保存未完成的更改:你需要切换任务或者分支,但不想丢失当前工作进度。
- 清理工作区:在不提交更改的情况下,清理工作目录以便进行其他操作。
- 管理多个修改:你可以保存多个修改状态,并根据需要恢复和删除。
常见的命令包括:
git stash
:保存当前更改。git stash list
:列出所有 stash。git stash apply
:恢复最近的 stash。git stash pop
:恢复并删除 stash。git stash drop
:删除特定的 stash。
通过 git stash
,你可以灵活地切换任务和分支,同时不丢失任何进度。
发表回复