【问题标题】:Is there a graphical way to git stash/unstash individual files?是否有图形方式来 git stash/unstash 单个文件?
【发布时间】:2015-06-20 13:12:53
【问题描述】:

我正在寻找一个用于在 git 中存储和存储弹出文件的 GUI,并且能够对单个修改的文件执行此操作。我知道有一种命令行方式可以做到这一点,见here,但我正在寻找一种图形方式。我不太关心存储单个文件,但更关心弹出/应用。我在 Windows 7 上运行。

【问题讨论】:

  • 不幸的是,您的问题是题外话。 Stack Overflow 与软件推荐无关。
  • @Jubobs,好吧,我认为它是“我需要一种方法来解决我的特定问题”,而不是“哪个 git gui 客户端是最好的”。
  • 您的操作系统?在 Windows 上,GitExtensions 可以做到这一点......
  • 您遇到了问题,但您正在寻找错误方向的解决方案。 git stash 是为不同的事物而设计的(在其文档的第一段中进行了解释)。如果您创建一个新分支并在其上提交更改(以您想要的任意数量的组合),直到您达到您想要的状态,您就可以做您想做的事情(并且以比存储更灵活的方式)。然后只需检查上一个分支即可。
  • @axiac,我认为你是对的。我正在使用来自 Perforce 的 git,所以我试图让 stash 适合“搁置”模具,但我认为分支是更好的方法。与此相关的是 git extensions 从我的存储中创建了一个分支,因此我可以存储但在抓取单个文件时将其视为分支。

标签: git git-stash


【解决方案1】:

我在<USER HOME directory>\.gitconfig 中看到了建议 here 将 Stash 命令作为菜单添加到“Git GUI”。

[guitool "Stash/show"]
  cmd = git stash show -p
[guitool "Stash/list"]
  cmd = git stash list
[guitool "Stash/pop"]
  cmd = git stash pop
[guitool "Stash/drop"]
  cmd = git stash drop
  confirm = yes

我还添加了一个命令来执行存储(要使用,您必须先暂存——但不提交——您希望存储的文件,以便 Git 执行所需的“添加”):

[guitool "Stash"]
  cmd = git stash

(请注意,我选择让“stash”不显示为子菜单,但您可以这样做。)

您还可以通过 Git GUI 本身通过 Tools->Add 添加命令。

如果您只想快速忘记文件而不考虑分支名称,则存储可能会有所帮助。

【讨论】:

    【解决方案2】:

    git stash 的文档说:

    当您想记录工作目录和索引的当前状态,但又想回到干净的工作目录时,请使用git stash。该命令会保存您的本地修改并恢复工作目录以匹配 HEAD 提交。

    它为处理单个文件提供了非常少的支持1,因为它的目的是安全地存储您当前的更改并快速将您的工作树带入一个干净的状态(即在您上次提交之后立即在当前分支上)。

    如果您创建一个新分支并在其上提交更改(以您想要的任何数量或组合),直到达到您想要的状态,您就可以做您想做的事(并且以比存储更灵活的方式)。然后只需检查上一个分支即可。

    这种方法允许您稍后将更改合并到当前分支中,以便仅从中挑选一些提交甚至一些文件。


    1git stash save 提供选项--patch,允许用户从HEAD 和要隐藏的工作树之间的差异中交互式地选择块。它允许对添加到存储中的内容进行精细控制。

    额外讨论

    你说:

    我正在使用来自Perforcegit,所以我试图让存储适合“搁置”模具,但我认为分支是更好的方法。与此相关的是 gitextensions 从我的存储中创建了一个分支,因此我可以存储但在抓取单个文件时将其视为一个分支。

    在内部,每个 stash 都与 stored as a commit 链接到在创建 stash 时作为 HEAD 的提交,但未链接到前一个 stash(如果有)。存储列表存储为元数据;存储在(隐藏的)分支中未链接

    更多,git stash create 允许创建存储而不将其添加到存储列表中。它是为编写脚本而提供的,“可能不是您想要使用的命令”(我引用自文档)。

    【讨论】:

    • 谢谢。澄清一下,我不认为 stash 真的像一个分支,但 git 扩展使它看起来如此 - 这可能是好是坏。 git extensions 提供了一层抽象,有时我在做什么并不清楚。
    • 确实,gitextensions 使存储列表看起来像一个分支;虽然这可以帮助初学者更轻松地适应git,但它会在以后误导他们。 SourceTree 将存储显示为独立对象,与显示分支、标签和遥控器的方式相同。试一试(它是免费的),也许你会喜欢它。它也是 Mercurial 客户端。
    • “存储列表存储为元数据”——据我所知,基本上在 refs/logs/stash 中。你指的git save是什么?
    • @Mr_and_Mrs_D 应该是git stash save,我写答案时忘记了stash。我现在修好了。感谢您指出这一点。
    【解决方案3】:

    您是否尝试过 Sourcetree: http://www.sourcetreeapp.com/

    它可能会解决你的问题。

    【讨论】:

    • SourceTree 是一个很好的Git GUI 客户端,但它不能存储单个文件。也许这是因为stash 命令不是为这种方式设计的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    相关资源
    最近更新 更多