乌龟Git是否允许有选择地暂存文件,类似于git-gui?

42

这个问题:

如何使用 TortoiseGit 与暂存区交互?

认为 TortoiseGit 的主要功能不是为了消除 git 命令行的需求,总体而言,我同意这种看法。

然而,git-gui 有一个我经常使用的功能(也许是为了弥补糟糕的工作流):选择性地将当前补丁中的块或行分阶段暂存或取消暂存,以将一堆相互穿插的更改分成多个提交的一致性变更集。

对于我来说,命令行替代方案有点笨拙,因此,理想情况下,我希望在 TortoiseGit 中进行相同的选择性提交。

到目前为止,我还没有找到一种方法来做到这一点,并且从其他问题的答案中可以推断出,这似乎是不可能的。请问有人可以证实这一点吗?


3
到目前为止,我所见过的在Windows上完全支持GUI中选择性暂存的唯一客户端是[SmartGit](http://www.syntevo.com/smartgit/index.html)。尽管如此,与TortoiseGit或GitExtensions相比,它也有弱点。 - Ivan Danilov
@Ivan Danilov:谢谢,SmartGit是我日常工作中的最爱。如果您想将此作为答案,它会非常竞争力... - Brent.Longborough
我已经回答并略微扩展了我的简洁评论,所以它可以被视为真正的答案 :) - Ivan Danilov
Git Gui 也支持选择性的暂存和提交。 - Th 00 mÄ s
@ThomasS:是的,它可以。如果它不经常在Windows上陷入挂起状态,那么我就会满足于仅使用它;但事实并非如此,我需要在Windows上更可靠地工作。 (我怀疑这是某种MSYS[2]或MinGW(库)故障,因为我不记得在Linux上发生过这种情况,但在Windows上,这种情况经常发生。有时也会出现gitk,因此这可能是TCL / wish.exe触发的错误,这更可能发生在TCL程序尝试读取输出的子进程越多。) - SamB
5个回答

55
是的,现在支持此功能:请参见问题222 - 它采用了与TortoiseSVN相同的方法:
  • 右键单击文件,选择“提交后还原”
  • TSVN将文件的副本创建到工作副本之外,文件在提交对话框中以不同的方式显示(可能是叠加图标或不同的颜色)
  • 用户可以双击该文件,在TMerge或其他差异工具中撤消所有不应提交的更改,然后保存这些更改
  • 提交
  • 提交完成后,将移动原始文件的副本

来自TSVN问题68


Duncan,非常感谢您。我现在深深地爱上了SmartGit,但是对于所有的TSVN团队,我要说,不要气馁,继续努力;即使您面临真正的激烈竞争,您仍然很棒。 - Brent.Longborough
1
很高兴看到TortoiseGit团队创建了一个良好的、面向GUI的方式来完成这项工作,而不是大多数其他git-gui使用的笨拙的GUI-over-a-console-app方式。现在如果他们也能为交互式变基做同样的事情就好了... - BlueRaja - Danny Pflughoeft
3
这并不是有选择性地暂存,而是一种变通方法。有选择性的暂存意味着你可以随时决定哪些更改需要提交,哪些不需要,而无需创建提交记录。但这个方法不行。因此,在TortoiseGit中声称支持有选择性暂存是不正确的。请注意,翻译中保留了原文的意思和用词,同时尽可能使语言通俗易懂。 - Len

16
到目前为止,我所见过的在Windows上完全支持GUI选择性暂存的客户端只有SmartGit

虽然如此,与TortoiseGit或GitExtensions相比,它也有一些弱点。

对我来说,SmartGit的主要缺点是:

  1. 无法比较两个修订版本。你只能查看一个修订版本和其父版本之间的差异(TortoiseGit可以)。
  2. 无法(嗯,这有点奇怪,可能我没有找到方法)将日志限制在某个文件夹中,如果我对所有内容都不感兴趣(TortoiseGit可以)。
  3. 与VisualStudio的集成(有些主观,但GitEx有这个功能,非常方便)

我记得还有其他的问题,但是现在评估最新版本的SmartGit,我找不到它。要么它已经被修复/添加了,要么我忘记了那个时候我不能做什么。

无论如何,我正在使用GitEx和TortoiseGit进行某些操作,而对于其他所有事情,控制台是最好的工具。


谢谢你的回答,特别是向我介绍了SmartGit - 我已经爱上它了。显然,你提到的限制是有效的,但由于它们不构成我的工作流程的重要部分,所以没问题。(当然,每个人的情况可能都不同。) - Brent.Longborough
1
仅供记录,我的当前版本的SmartGit(2.1.7:2012-01-23)确实允许您查看给定单个文件夹(内容)或单个给定文件以及整个树的日志。 - Brent.Longborough
5
截至2012年3月,TortoiseGit和Git Extensions都支持使用hunks。我认为Duncan Smart的回答应该被标记为此问题的答案(无论SmartGit有多好)。 - Borek Bernard
@Borek:是的,他们已经赶上了进度,更新得很好。 - Ivan Danilov
Sourcetree致敬,作为另一个支持非常直观的选择性暂存的Windows客户端。我几乎在所有情况下都使用TortoiseGit,并在需要使用暂存功能时启动Sourcetree。 - BTownTKD

6

SourceTree (https://www.sourcetreeapp.com/) 有一个非常直观的图形用户界面,用于选择性地暂存文件。它旨在与 BitBucket 集成(毕竟是同一家公司),但也可以轻松地与任何 git 存储库一起使用。

我仍然同时使用 TortoiseGit,特别是因为一些不错的功能,比如修订历史图表。


1
在我提出这个问题的四年里,我有了很大的进展,从TortoiseGit转移到Syntevo SmartGit,最终到了SourceTree,我发现它对于几乎所有事情都非常棒(包括不仅仅是BB,还有GitHub)。在SourceTree中无法完成的0.5%,我会在命令行上完成。 - Brent.Longborough
Sourcetree很棒,但遗憾的是他们不支持Linux。 - Renaud

6
根据222号问题的状况来看,"add -p"功能尚未实现。
你能否添加部分提交文件的支持? (git add -p)。我知道TortoiseGit的工作方式与正常的"git index"有些不同,但仍希望以某种方式支持它。
我想只提交文件的一些更改。例如,仅提交文件的单行修复,保留其余部分在工作副本中。

0

1
此外,有一个讨论正在 https://gitlab.com/tortoisegit/tortoisegit/-/issues/2299 上进行,但最终指向同一 PR。 - nilsandrey
看起来已经合并了。等待新版本发布... - Alex
是的,我也在等待新版本发布。 - ollydbg23
也许你可以在这里尝试一个:https://download.tortoisegit.org/tgit/previews/,但我不确定2021-07-25最新的预览版本是否包含了这些合并的提交。 - ollydbg23

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