如何使用Git Stash特定文件

如何使用Git Stash特定文件

技术背景

在使用Git进行版本控制时,有时我们只希望暂存(stash)特定的文件,而不是将所有修改都暂存起来。这样可以在不影响其他文件修改的情况下,对特定文件进行隔离处理。

实现步骤

Git 2.13及以上版本

从Git 2.13开始,可以使用git stash push <path>命令来将特定路径的文件保存到暂存区。例如:

1
git stash push -m welcome_cart app/views/cart/welcome.thtml

其中,-m选项用于添加暂存信息。

早期版本

  • 使用git stash --patch(或git stash -p
    进入交互式模式,会显示每个被修改的代码块(hunk)。使用n跳过不想暂存的文件,使用y暂存想要的文件,使用q退出并保留剩余未暂存的代码块。使用a可以暂存当前显示的代码块以及该文件中的其余代码块。
  • 先添加不想暂存的更改到索引,然后使用--keep-index选项进行暂存
1
2
3
git add app/controllers/cart_controller.php
git stash --keep-index
git reset

最后一步git reset是可选的,它会从索引中移除更改。

暂存单个文件

1
git stash -- filename.txt

若要在命令中提供暂存信息,而不是在提示时输入,可以在文件部分之前添加-m,例如:

1
git stash -m "stash-message" -- filename1.txt

暂存多个文件

1
git stash -m "stash-message" -- filename1.txt filename2.txt…

使用VSCode扩展

如果使用Visual Studio Code,可以通过以下步骤暂存选定的文件:

  1. 确保在VSCode中安装了GitLens扩展。
  2. 转到“源代码管理”选项卡。
  3. 选择要暂存的文件。
  4. 右键单击,选择“暂存更改”。
  5. 输入可理解的暂存信息并按回车键。

Git 2.35.0及以上版本

可以使用--staged | -S标志暂存已暂存的更改,例如:

1
git stash --staged

核心代码

1
2
3
4
5
6
7
8
# 暂存特定文件
git stash push -m "message" app/views/cart/welcome.thtml

# 暂存多个文件
git stash -m "message" -- filename1.txt filename2.txt

# 暂存已暂存的更改
git stash --staged

最佳实践

  • 使用git stash push <path>命令,因为它支持文件模式匹配,例如git stash push welcome.*ml可以暂存以welcome.开头并以ml结尾的任何文件。
  • 在暂存之前,使用git status命令确保要暂存的更改确实存在。
  • 为暂存添加有意义的信息,方便后续查找和管理。

常见问题

  • git stash --keep-index的问题git stash --keep-index会将所有更改(已暂存和未暂存)都推送到暂存区,--keep-index只是在暂存完成后保持索引不变。这可能会在后续弹出暂存时导致合并冲突。
  • 忘记暂存信息:可以使用git stash list命令查看暂存列表,找到对应的暂存索引,然后使用git stash apply stash@{<index_of_saved_stash>}恢复暂存的文件。

如何使用Git Stash特定文件
https://119291.xyz/posts/2025-05-14.how-to-git-stash-specific-files/
作者
ww
发布于
2025年5月14日
许可协议