有没有一种图形化的方法可以对单个文件进行git stash/unstash操作?

18

我正在寻找一个针对git进行暂存和弹出文件的图形用户界面(GUI),并且可以单独操作修改过的文件。我知道有一种命令行方式来实现,可以在这里看到,但我想要一个图形化的方式。我不太关心单独暂存文件,而是更关心弹出/应用文件。我正在运行Windows 7。


很遗憾,您的问题不属于讨论范畴。Stack Overflow 并非关于软件推荐的网站。 - jub0bs
1
@Jubobs,好的,我认为这是“我需要解决我的特定问题的方法”,而不是“哪个git gui客户端最好”。 - Chance
1
你有一个问题,但是你正在错误的方向上寻找解决方案。git stash是为不同的事情而设计的(它在文档的第一段中有解释)。如果你创建一个新分支并在其中提交更改(以任何组合方式),直到达到所需状态,那么你可以以比存储更灵活的方式做你想做的事情。然后只需切换回之前的分支,就完成了。 - axiac
1
@axiac,我认为你是对的。我从Perforce转到使用git,所以我试图让stash适应“shelve”的模式,但我认为分支是更好的方法。与此相关的是,git扩展有点像将我的stash作为一个分支处理,因此当获取单个文件时,我可以将其视为分支而不是stash。 - Chance
@axiac,如果你把那个作为你的答案发表,我会接受。 - Chance
显示剩余2条评论
3个回答

17

我在这里看到一个建议(链接),可以将Stash命令添加到你的<USER HOME directory>\.gitconfig中的“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才能执行必要的"add"操作):

[guitool "Stash"]
  cmd = git stash

(请注意我选择让 "stash" 不出现在子菜单中,但您可以这样做。)

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

如果您只想快速将文件放在一边而不必考虑分支名称,则存储可能有所帮助。


6

git stash的文档说明:

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

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

如果创建一个新分支并在其中提交更改(以任何数量或组合),直到达到所需状态,然后只需切换到先前的分支即可实现比stash更灵活的操作。

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


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

额外讨论

你说:

我正在使用Perforce过渡到git,所以我试图使存储区适应“暂存”模式,但我认为分支是更好的方法。与此相关的是{{link1:gitextensions}}将我的存储区视为一个分支,因此在获取单个文件时,我可以将其视为分支而不是存储区。

在内部,每个存储都会作为提交与创建存储时的HEAD提交关联,但不会与之前的存储(如果有)相关联。存储列表存储为元数据;存储不会在(隐藏的)分支中链接。

此外,git stash create允许创建存储并将其添加到存储列表中。它提供了用于脚本编写和“可能不是您想使用的命令”(摘自文档)。


感谢。为了澄清,我认为stash并不像分支,但是git扩展使其看起来像分支——这可能是好事或坏事。Git扩展提供了一层抽象,有时候我做什么并不完全清楚。 - Chance
确实,gitextensions 将存储列表显示为分支;虽然这可以帮助初学者更容易地适应 git,但它会误导他们。SourceTree 将存储看作独立的对象,与其显示分支、标签和远程方式相同。试试吧(它是免费的),也是一个 Mercurial 客户端。 - axiac
据我所见,在refs/logs/stash中,存储了暂存列表的元数据。你所提到的“git save”是什么? - Mr_and_Mrs_D
1
@Mr_and_Mrs_D 应该是 git stash save,我在回答时忘记了 stash。现在已修正。谢谢你指出来。 - axiac

5

3
SourceTree是一个不错的Git图形用户界面客户端,但它无法对单个文件进行隐藏。也许这是因为stash命令没有设计成这种方式工作? - axiac

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接