【问题标题】:Is it possible to delete a single file (i.e the diff of one file) from git stash with several files是否可以从带有多个文件的 git stash 中删除单个文件(即一个文件的差异)
【发布时间】:2014-05-15 07:04:15
【问题描述】:

我正在寻找一种方法来删除由多个更改编译而成的存储库中的单个更改,有人知道这样做的方法吗? 描述它的最佳方式(由于git commitgit stash 非常相似)是我希望我知道git commit --amend stash 的方法。

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

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

【问题讨论】:

    标签: git git-stash


    【解决方案1】:

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

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

    在你的情况下,我建议这样的步骤:

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

    然后运行:

    git stash branch wip-branch
    

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

    现在您有了一个真正的分支“wip-branch”,其中包含您隐藏的更改,您可以根据自己的喜好对其进行 rebase、merge、cherry-pick 等:-)。

    注意:虽然我以前经常使用git stash,但我几乎停止了,因为在真实分支上创建真实(临时)提交并没有太多工作,并且给了我更多选择(更不用说我可以使用正确的提交 cmets,所以我不会忘记更改的含义)。

    【讨论】:

    • 比我的回答更详细。我喜欢分支方法。 +1
    • @VonC:谢谢。实际上(正如您从编辑历史中看到的那样),我曾经手动创建分支并应用存储。回答这个问题促使我阅读了 git-stash 手册页,我发现 git-stash 实际上有一个将存储转换为分支的命令。正如谚语所说,“教就是学”。
    • 好收获! git stash branchFTW!
    • @sleske,谢谢!我希望我不必使用您的解决方案,我已经清除了存储(在尝试一些“voodoo 命令”时意外结合 Q 我链接中写的内容)因为其他人需要我的代码(共享存储库)。无论如何,你可以在你的存储中添加一条消息/评论......
    【解决方案2】:

    也许更容易:

    • 应用你的存储
    • git checkout 有冲突的文件(重置它,忽略其中的任何冲突)
    • git stash 再次

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-20
      • 1970-01-01
      • 1970-01-01
      • 2010-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多