藏一个特别的大块头,Git

藏一个特别的大块头,Git,git,Git,使用Git,我只想在一个特定的文件中保存一个块,以便提交其余的更改。因此,我可以通过从储藏室中取出零钱来找回我的临时零钱。 但是,我能找到的唯一方法是将所有未归档的文件都隐藏起来。这里有一个工作流,可以使用分支完成您想要的内容,我个人更喜欢使用分支,而不是隐藏。它需要更多的输入和命令,但它可以让您完全控制之后的结果 git checkout -b dev.temp git add <file-to-stash> git commit -m'stash work alike' git

使用Git,我只想在一个特定的文件中保存一个块,以便提交其余的更改。因此,我可以通过从储藏室中取出零钱来找回我的临时零钱。
但是,我能找到的唯一方法是将所有未归档的文件都隐藏起来。

这里有一个工作流,可以使用分支完成您想要的内容,我个人更喜欢使用分支,而不是隐藏。它需要更多的输入和命令,但它可以让您完全控制之后的结果

git checkout -b dev.temp
git add <file-to-stash>
git commit -m'stash work alike'
git checkout <base-branch>
# commit what you need in <base-branch>
使用所有选项,您可以在使用完git branch-D dev.temp后删除该分支-如果您实际将其合并回中,则可以使用-d,但是如果分支未实际合并,但您已经恢复了所需的更改,则需要使用-d


我强烈倾向于使用临时开发分支而不是隐藏,因为它可以让您更好地控制输入的内容以及之后如何将其取出,尽管我同意隐藏本身也有有效且肯定更快的工作流:这是速度和控制之间的权衡。

在最新的Git版本中,git stash push命令接受一个pathspec来指定要隐藏的文件,以及一个-p选项,如git add:

这将给你一个类似于git add-p的提示,让你选择想要隐藏的大块肉,并且它只会隐藏你为指定文件选择的更改

使用git 2.17.0测试上述溶液。我还使用较旧的版本git 2.4.10进行了测试,不支持pathspec。但是-p仍然可以用于git stash save:


不过,这并不像最近使用Git时的选项那么好,因为你必须以交互方式浏览所有文件,而不仅仅是你想要的文件。

除了使用-patch的那个大块头之外,向索引添加所有内容,然后使用Git stash save-keep索引如何?你只需先提交,然后隐藏。@evolutionxbox我已经试过了,它所做的是在保留暂存文件的同时隐藏暂存文件,并删除所有未暂存的修改。这不是我想要的行为,这就是为什么我建议添加所有内容。它可以在隐藏后全部取消隐藏。您能展示一下您是如何使用-patch的吗?我相信这可能是一个解决办法,可以保存临时更改。但是,我一直在寻找一种快速的方法,在一个特定的大块头上藏起来,而不需要做临时的承诺。我同意,一个快速藏起来的命令会更好,我刚刚找到了一个。我将写第二个答案。PS:刚刚在git 2.4上测试过,filespec不受支持,但是git stash save-p可以工作,只是它可以让你浏览所有文件,而不仅仅是指定的文件。太棒了!这就是我一直在寻找的答案。谢谢:没问题。现在我找到了,谢谢你的提问我想我也会用它。比我的建议简单!
git checkout dev.temp
git rebase <base-branch>
#work here, merge or rebase when you're done
git checkout dev.temp <file-to-stash>
git cherry-pick dev.temp
git stash push -p -- filename(s)
git stash -p -- filename(s)
git stash save -p
git stash -p