使用Git,我只想在一个特定文件中存储一个块,以提交其余的更改。因此,我可以通过从藏匿处撤回它来进行临时更改。 但是,我唯一能找到的方法是存放整个未暂存的文件。
答案 0 :(得分:2)
在最新的Git版本中,git stash push
命令接受路径说明以指定要存储的文件,并接受-p
选项,如git add
:
git stash push -p -- filename(s)
或
git stash -p -- filename(s)
这将为您提供类似于git add -p
的提示,以选择要存储的块,并且将仅存储为指定文件选择的更改。
上面的溶液用git 2.17.0测试。我还使用较旧的版本git 2.4.10进行了测试,并且不支持pathspec。但是-p
仍可用于git stash save
:
git stash save -p
或
git stash -p
但是,它不如使用最新的Git的选项好,因为您必须以交互方式浏览所有文件,而不仅仅是所需的文件。
答案 1 :(得分:1)
这里是一个工作流,它使用分支来完成您想要的工作,这是我个人更喜欢使用的而不是隐藏的东西。它具有更多的键入功能和更多的命令,但此后您可以完全控制结果。
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>
从这里开始,您的“隐藏”文件位于分支中,因此有许多继续的方法。
选项1:转到分支并继续工作,完成后进行合并或变基:
git checkout dev.temp
git rebase <base-branch>
#work here, merge or rebase when you're done
选项2:将文件检出到主分支中:
git checkout dev.temp <file-to-stash>
<file-to-stash>
现在在索引中;使用git reset
将其还原为本地更改的文件,并继续使用您所在的位置。
选项3:选择要提交的内容,因此它也已提交到您的工作分支中-这与您的工作流程最不相似,因为它使<file-to-stash>
保留在`中,但这是为了完整性:>
git cherry-pick dev.temp
使用所有选项,可以用git branch -D dev.temp
删除分支。如果您确实将其合并回,-d
会执行,但是如果分支实际上未合并但您已经恢复了想要的更改,则需要-D
。
我非常倾向于使用暂存dev分支而不是存储,因为它可以让您更好地控制放入内容以及之后如何将其取出,尽管我同意这样做也有效(而且肯定更快)具有隐藏自身的工作流程:这是速度和控制之间的权衡。