藏一个特定的大块头,Git

时间:2019-02-06 11:33:07

标签: git

使用Git,我只想在一个特定文件中存储一个块,以提交其余的更改。因此,我可以通过从藏匿处撤回它来进行临时更改。 但是,我唯一能找到的方法是存放整个未暂存的文件。

2 个答案:

答案 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分支而不是存储,因为它可以让您更好地控制放入内容以及之后如何将其取出,尽管我同意这样做也有效(而且肯定更快)具有隐藏自身的工作流程:这是速度和控制之间的权衡。