如何从多个已更改的文件中仅暂存一个文件
如何从多个已更改的文件中仅暂存一个文件
技术背景
在使用Git进行版本控制时,我们常常会遇到一次修改了多个文件,但只想暂存其中部分文件的情况。Git提供了多种方式来实现这一需求,不同的方法适用于不同的场景和Git版本。
实现步骤
方法一:使用git stash push -p
(适用于交互选择)
- 运行命令:
git stash push -p -m "my commit message"
- 对于每个差异块(hunk),会提示以下操作选项:
y
:暂存此差异块n
:不暂存此差异块q
:退出,不暂存此差异块及后续差异块a
:暂存此差异块及文件中后续所有差异块d
:不暂存此差异块及文件中后续所有差异块g
:选择要跳转的差异块/
:搜索匹配给定正则表达式的差异块j
:不决定此差异块,查看下一个未决定的差异块J
:不决定此差异块,查看下一个差异块k
:不决定此差异块,查看上一个未决定的差异块K
:不决定此差异块,查看上一个差异块s
:将当前差异块拆分为更小的差异块e
:手动编辑当前差异块?
:打印帮助信息
方法二:使用git add
+ git stash --keep-index
- 使用
git add
添加你想要保留的文件。 - 运行
git stash --keep-index
,这将暂存所有未添加的文件。
方法三:使用git stash push
指定文件(Git 2.13及以上版本)
- 简单示例:
git stash push path/to/file
- 带消息示例:
git stash push -m "Some message" "filename"
方法四:使用diff
、checkout
和apply
- 生成差异文件:
git diff path/to/dir > stashed.diff
- 恢复文件:
git checkout path/to/dir
- 应用差异:
git apply stashed.diff
方法五:临时提交不需要暂存的文件
- 临时提交不需要暂存的文件:
1 |
|
- 暂存其他文件:
git stash save "stash message"
- 撤销临时提交:
1 |
|
方法六:使用新的--staged
选项(Git >= 2.35)
1 |
|
核心代码
使用git stash push -p
1 |
|
使用git add
+ git stash --keep-index
1 |
|
使用git stash push
指定文件
1 |
|
使用diff
、checkout
和apply
1 |
|
临时提交不需要暂存的文件
1 |
|
使用新的--staged
选项
1 |
|
最佳实践
- 如果需要交互选择暂存内容,推荐使用
git stash push -p
。 - 对于Git 2.13及以上版本,直接使用
git stash push
指定文件是最简单的方法。 - 当只想暂存已暂存的文件时,使用新的
--staged
选项。
常见问题
- 合并冲突:使用
git stash --keep-index
可能会导致后续弹出暂存时出现合并冲突,需要手动解决。 - 文件路径丢失:将文件复制到Git仓库外进行暂存时,会丢失路径信息,可使用
tar
命令代替复制。 - 未跟踪文件:如果有未跟踪的文件,使用
git stash push --include-untracked
可以包含这些文件。
如何从多个已更改的文件中仅暂存一个文件
https://119291.xyz/posts/how-to-stash-one-file-out-of-multiple-changed-files/