文章目录
引言
今天给大家详细分享下git stash
命令使用详情, 因为使用 Git 进行版本控制的过程中,你是否常常遇到这样的情况:正在进行一项功能开发,代码写到一半,突然需要切换到其他分支去处理一些紧急事务,但又不想提交这些未完成的代码?或者在拉取远程分支的最新代码之前,想要先保存当前工作区的修改状态? 这时候,git stash
命令就成为了你的得力助手。
一、git stash
基础命令
(一)存储当前工作区的修改
这个命令会将当前工作目录和暂存区的所有未提交的修改保存起来,包括新增、修改和删除的文件,并将其存储在一个栈结构中,每个存储都可以附带一个描述信息(
message
),以便后续识别。执行该命令后,工作区会恢复到最近一次提交时的状态,你可以放心地进行其他操作,比如切换分支、拉取代码等。
- 示例模板: :
git stash save [message]
bash
# 没有message
git stash
# 有message
git stash save '正在开发的新功能,未完成阶段'
(二)查看存储列表
该命令的输出通常是一个列表,每个条目代表一个已保存的 stash
bash
git stash list
二、查看存储的内容
(一)查看特定存储的详细内容
显示哪些文件被修改、新增或删除,让你快速了解存储的大致内容
- 示例模板: :
git stash show -p [stash@{n}]
-p
选项表示以补丁的形式展示存储的内容,stash@{0}
表示最新的一次存储(n
从 0 开始递增,代表存储的顺序)。
bash
git stash show -p stash@{0}
(二)查看特定存储修改的文件列表
此命令只会列出被修改的文件列表,不显示具体的代码修改细节
- 示例模板: :
git stash show [stash@{n}]
bash
git stash show stash@{1}
三、恢复存储的修改
(一)恢复并删除存储
这个命令会将指定的存储(
stash@{0}
)从栈中弹出,并将其中的修改应用到当前工作目录。如果在应用过程中遇到冲突,Git 会像合并分支时一样标记出冲突的部分,需要你手动解决冲突后再提交。一旦应用成功,该存储就会从存储列表中删除
- 示例模板: :
git stash pop [stash@{n}]
bash
git stash pop stash@{0}
(二)恢复但不删除存储
apply
命令与pop
类似,会将指定存储(stash@{0}
)的修改应用到当前工作目录,但不同的是,它不会从存储列表中删除该存储。 这意味着你可以多次应用同一个存储,或者在应用后仍然保留存储记录,以便后续参考或在其他分支上应用
- 示例模板: :
git stash apply [stash@{n}]
bash
git stash apply stash@{0}
# 默认是应用第一个
git stash apply
四、管理存储记录
(一)删除单个存储记录
当你确定不再需要某个特定的存储记录(
stash@{3}
)时,可以使用这个命令将其从存储列表中删除,释放存储空间并保持存储列表的整洁。如果不指定stash@{n}
,则默认删除最新的存储记录,所以在使用时要格外小心,确保删除的是你真正不再需要的存储。
- 示例模板: :
git stash drop [stash@{n}]
bash
git stash drop stash@{3}
(二)清空所有存储记录
如果你想要一次性删除所有的存储记录,使用
git stash clear
命令。这是一个比较"强力"的操作,因为它会将所有的存储记录都清除,不可逆地删除所有未应用的代码变更存储。在执行此命令之前,一定要确认你已经不再需要这些存储,或者已经将其中重要的修改应用到了工作区或者备份到了其他地方,以免造成数据丢失。
bash
git stash clear
五、git stash
的扩展用法
(一)存储特定文件或目录的修改
有时候,你可能并不想存储整个工作区的修改,而是只关注某些特定文件或目录的变更。
--patch
选项允许你交互式地选择要存储的文件块,对于大型文件的部分修改非常有用;--keep-index
选项可以让你在存储修改时,保持暂存区的现有状态,即只存储工作区的修改,而不影响已经暂存的文件;--include-untracked
选项则会将未跟踪的文件也一并存储起来。
- 示例模板: :
git stash push [--patch] [--keep-index] [--include-untracked] [<pathspec>...]
bash
git stash push --patch src/
(二)从存储创建分支
如果你希望基于某个存储的修改创建一个新的分支来继续开发,可以使用这个命令。它会创建一个新的分支(
new-branch
),可以使用下面的命令
- 示例模板: :
git stash branch <new-branch-name> [stash@{n}]
bash
git stash branch new-branch stash@{0}
六、总结
git stash
是一个强大而灵活的 Git 工具,它为我们在复杂的开发过程中提供了便捷的代码变更管理方式。通过合理运用 git stash
的各种命令,我们可以在不影响代码版本历史的前提下,轻松地切换工作上下文,保存和恢复未完成的代码修改,以及对存储记录进行有效的管理.