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,你可以灵活地切换任务和分支,同时不丢失任何进度。