是否可以从带有几个文件的git stash中删除单个文件(即一个文件的diff)

时间:2014-05-15 07:04:15

标签: git git-stash

我正在寻找一种方法来从一些由几个变化编译的藏匿中删除一个变化,有谁知道这样做的方法? 描述它的最佳方式(由于git commitgit stash如此相似)是我希望我知道通往git commit --amend存储的方法。

这一切都是在我从共享存储库中提取之前git stash进行一些更改时开始的。 当我试图从藏匿处git pop代码时,我遇到了一个冲突(我无法解决)与一个我不关心的文件,因为我有一个自动生成它的脚本,并且对我藏匿处的其他文件更感兴趣。

当我在寻找解决方案的时候,我发现了这个问题:How would I extract a single file (or changes to a file) from a git stash? - 它看起来很有希望,而且还有其他人向我提出类似的问题,但它没有帮助......

2 个答案:

答案 0 :(得分:1)

不,无法从存储中删除单个更改 - 至少不能使用git stash提供的高级命令。由于存储内部只是一个提交,你可以使用低级命令来操作它,但这可能比它的价值更麻烦。

我的经验法则是:如果事情开始变得复杂git stash,那么现在是时候将存储转换为真正的提交(通常在单独的分支上)。然后你可以使用所有好的git命令来操作提交(checkout,reset,rebase等)。

在您的情况下,我建议采取以下步骤:

如果git stash pop产生冲突,请清理工作副本(重新签出带有冲突标记的文件等)。

然后运行:

git stash branch wip-branch

这将创建并签出名为" wip-branch"的新分支,从最初创建存储的提交开始。然后它将应用来自存储的更改。这样就不存在冲突,因为隐藏的更改会重新应用于它们所基于的提交。

现在你有一个真正的分支" wip-branch"随着你的变化,你可以改变,合并,挑选等等你心中的内容: - )。

注意:虽然我过去经常使用git stash,但我几乎已经停止了,因为在真正的分支上创建一个真正的(临时)提交并不是更多的工作,并且给了我更多的选择(更不用说我可以使用正确的提交注释,因此我不会忘记更改的含义。

答案 1 :(得分:0)

也许更容易:

  • 申请您的藏品
  • git签出有冲突的文件(重置它,忽略其中的任何冲突)
  • git stash again