如何在我的分支中只存储多个已更改文件中的一个?
当前回答
解决方案
本地更改:
file_A(已修改)未暂存file_B(已修改)未暂存file_C(已修改)未暂存
要创建仅包含file_C上的更改的存储“my_stash”:
1. git add file_C
2. git stash save --keep-index temp_stash
3. git stash save my_stash
4. git stash pop stash@#{1}
完成。
解释
将file_C添加到临时区域创建一个名为“temp_stash”的临时存储,并将更改保存在file_C上只使用file_C上的更改创建所需的存储(“my_stash”)将“temp_stash”(file_A和file_B)中的更改应用于本地代码并删除存储
您可以在步骤之间使用gitstatus来查看发生了什么。
其他回答
我不知道如何在命令行上执行,只使用SourceTree。假设您已经更改了文件A,并且在文件B中有两个更改块。如果您只想将第二个块存储在文件B,而其他所有内容都保持不变,请执行以下操作:
舞台上的一切对工作副本执行更改,以撤消文件A中的所有更改(例如,启动外部diff工具并使文件匹配)使文件B看起来好像只应用了第二个更改。(例如,启动外部diff工具并撤消第一个更改。)使用“保留暂存更改”创建存储。取消标记所有内容完成!
一个复杂的方法是首先提交所有内容:
git add -u
git commit // creates commit with sha-1 A
重置回原始提交,但从新提交中签出_one_file:
git reset --hard HEAD^
git checkout A path/to/the_one_file
现在,您可以存储_one_file:
git stash
通过将提交的内容保存在文件系统中并重置为原始提交来进行清理:
git reset --hard A
git reset --soft HEAD^
是的,有点尴尬。。。
当您尝试在两个分支之间切换时,会出现这种情况。
尝试使用“git add filepath”添加文件。
稍后执行此行
git stash—保留索引
万一你真的打算在使用git stash时丢弃更改(而不是真的使用git stash临时存储),那么你可以使用
git checkout -- <file>
[注]
这个git存储只是分支和执行任务的一个快速而简单的替代方案。
这里的每个答案都很复杂。。。
“藏起来”怎么样
git diff /dir/to/file/file_to_stash > /tmp/stash.patch
git checkout -- /dir/to/file/file_to_stash
这将弹出文件更改:
git apply /tmp/stash.patch
与隐藏一个文件并将其弹出完全相同的行为。
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式
- git pull -rebase和git pull -ff-only之间的区别