详解 Git Stash 覆写:代码回退和工作现场保存的利器

目录

  1. 什么是 Git Stash
  2. 基本用法
  3. 进阶技巧
  4. 应用场景
  5. 常见问题
  6. 总结

什么是 Git Stash

Git Stash 是 Git 提供的一个非常实用的功能,它允许你临时保存当前的工作进度,并切换到其他分支或者执行其他操作。在需要恢复工作进度时,可以轻松地将保存的内容重新应用回来。

这在日常开发中非常有用,比如当你正在开发一个新功能,突然接到一个紧急的 Bug 需要修复,但是你又不想丢失当前的工作进度。这时候就可以使用 Git Stash 将当前的修改暂时保存起来,然后切换到其他分支进行 Bug 修复,修复完成后再将保存的修改恢复回来继续开发。

基本用法

保存工作现场

使用 git stash 命令可以将当前的修改暂时保存起来:

git stash

执行这个命令后,Git 会将你当前的工作现场(包括暂存区和工作区的修改)保存到一个栈结构中,并将工作区恢复到上一次提交的状态。

查看 Stash 列表

使用 git stash list 命令可以查看当前保存的 Stash 列表:

git stash list

输出示例:

stash@{0}: WIP on master: 049d078 added the index file stash@{1}: WIP on master: c264051 Revert “added file_size”stash@{2}: WIP on master: 21d80a5 added binary file

每个 Stash 都有一个唯一的索引号 stash@{n},其中 n 表示第 n 个 Stash。

应用 Stash

使用 git stash apply 命令可以将指定的 Stash 应用到当前分支:

git stash apply [stash@{n}]

如果不指定索引号,则默认应用最新的 Stash(stash@{0}).

应用 Stash 后,工作区和暂存区的内容会被恢复到 Stash 保存时的状态,但 Stash 本身并不会被删除,需要手动删除。

删除 Stash

使用 git stash drop 命令可以删除指定的 Stash:

git stash drop [stash@{n}]

如果不指定索引号,则默认删除最新的 Stash(stash@{0}).

使用 git stash clear 命令可以一次性删除所有的 Stash:

git stash clear

进阶技巧

部分 Stash

有时候我们只想保存部分修改,而不是全部,这时可以使用 git stash -p 命令:

git stash -p

该命令会弹出一个交互式界面,让你选择哪些修改需要保存到 Stash 中。

Stash 重命名

使用 git stash save "自定义名称" 可以为 Stash 添加自定义名称:

git stash save “修复 bug #123”

这样可以更好地区分不同的 Stash。

Stash 合并

有时候我们会保存多个 Stash,当需要应用其中的修改时,可以使用 git stash branch 命令将 Stash 中的修改合并到一个新分支上:

git stash branch
[stash@{n}]

这个命令会创建一个新的分支 <new-branch>,并将指定的 Stash 应用到新分支上。

应用场景

紧急 Bug 修复

当你正在开发新功能,突然接到一个紧急的 Bug 需要修复时,可以使用 Stash 将当前的工作现场暂时保存起来,然后切换到其他分支进行 Bug 修复,修复完成后再将保存的修改恢复回来继续开发。

临时切换分支

有时候你需要临时切换到其他分支进行一些操作,但是当前分支上有未提交的修改,这时候可以使用 Stash 将修改暂时保存起来,等切换回来后再应用回来。

代码冲突解决

在合并分支时,如果出现代码冲突,你可以先使用 Stash 保存当前的修改,然后切换到主分支手动解决冲突,解决完成后再将保存的修改应用回来。

常见问题

如何撤销 Stash 操作

如果你不小心执行了 git stash 命令,想要撤销这个操作,可以使用 git stash pop 命令:

git stash pop

这个命令会将最新的 Stash 应用到当前分支,同时也会从 Stash 列表中删除这个 Stash。

Stash 丢失怎么办

如果不小心将 Stash 列表清空了,或者不小心删除了某个 Stash,可以尝试使用 git fsck 命令来查找是否还有遗留的 Stash:

git fsck –lost-found

这个命令会列出所有未被引用的 Git 对象,其中可能包含你之前保存的 Stash。找到后可以使用 git stash apply 命令将其恢复回来。

Stash 与分支的关系

Stash 是独立于分支的,它存储在 Git 仓库的一个特殊区域中。你可以在任何分支上执行 git stash 命令,保存的 Stash 都会存储在同一个栈结构中。

当你切换到其他分支后,仍然可以使用 git stash apply 命令将 Stash 应用到当前分支上。这使得 Stash 成为一个非常灵活和强大的功能。

总结

Git Stash 是 Git 提供的一个非常实用的功能,它允许你临时保存当前的工作进度,并切换到其他分支或者执行其他操作。通过学习和掌握 Stash 的基本用法和进阶技巧,可以极大地提高日常开发的效率和灵活性。

希望本文对你理解和使用 Git Stash 有所帮助。如果你还有任何疑问,欢迎在下方留言交流。

正文完