【问题标题】:SmartGit not showing uncommited changes in LogSmartGit 未在日志中显示未提交的更改
【发布时间】:2018-12-10 00:43:27
【问题描述】:

我的 SmartGit 客户端出现问题(但可能与 Git 有关)。

我有一些未提交的更改,所以我假设这将显示为图表中的第一行(日志视图),但事实并非如此。如何找回?

此屏幕截图显示了我要查找的内容:

而且我完全在本地工作,所以我没有远程存储库(不确定这是否有什么不同)。

在 Bash shell 中运行命令 git log --all --decorate --oneline --graph 时,我也没有看到 Uncommitted changes 行。什么数字?

【问题讨论】:

  • 您正在寻找的内容将在 SmartGit 18.2 中实现:smartgit.userecho.com/topics/27
  • @mstrap 太棒了,谢谢!出于某种原因,我认为这一直是 SmartGit 中的一个功能,也许这只是一种错觉,因为我来自 SourceTree 背景并发现它非常有用。

标签: git smartgit


【解决方案1】:

这实际上只是对您问题最后一部分的回答,但使用git log --all --decorate --oneline --graph。您想知道为什么没有看到未提交更改的提交节点。

gitk(Git自带的GUI)展示了这样一个节点; git log --graph 没有。由每个查看者决定是假装未提交的更改是可以显示的提交节点,还是只是未提交的更改而不是节点。

从技术角度来看,后者更准确:未提交的更改不是提交!但是,在 GUI 中显示它们可能对用户更友好。所以由 GUI 决定是否显示它们。

请注意,从 Git 的角度来看,实际上每个文件都有 三个 版本可供您随时使用。1 如果您有一个名为 README.md 的文件,例如,您实际上有 三个 README.md 文件:

  • 一个README.md 存储在当前(HEAD)提交中,只读。此副本永远无法更改!它以一种特殊的、仅限 Git 的压缩形式存储。因为它存储在提交中,所以它会一直保留,或者至少只要提交继续存在。

    如果您弄乱了README.md 的其他两个版本,您可以在命令行中使用git checkout HEAD README.md 恢复HEAD 版本。这会覆盖其他两个副本。

  • 第二个README.md,将进入下一个提交,读/写,存储在一个非常重要但通常几乎完全不可见的(!)实体中。 Git 对这个东西有三个不同的名字:它被称为 index,或 staging-area,或 cache,这取决于谁在做打电话。您当前的所有文件都在索引中,也是特殊的仅 Git 格式,但在索引中,您可以更改它们。

    在您更改此文件副本之前,如果您进行新的提交,新提交中的README.md 将与当前提交中的README.md 匹配。所有其他文件也是如此。

    在命令行上,您通常使用git add README.md 更改此文件副本。这会将文件的工作树版本(参见最后一个要点)复制到索引中。如果您决定希望索引副本恢复到它在当前提交中的显示方式,您可以使用git reset HEAD README.md。这与git checkout -- README.md 非常相似,只是它覆盖HEAD 版本的索引版本。

  • 最后,您可以在编辑器中实际打开README.md 文件,使用文件查看器进行查看,等等。此文件是您的工作树 中的文件。它是普通的非 Git 格式,因此您可以使用它。

    在某些方面,这是 Git 最不关心的文件。在你将它复制到索引中之前,它只是噪音——Git 几乎不看它。但是,git status 命令会将索引版本与工作树版本进行比较,并告诉您它们是否不同。

注意git status 所做的是运行两个 git diffs:第一个将HEAD 提交与索引进行比较。这里的任何不同之处都是为提交准备的。第二个git diff 将索引与工作树进行比较。此处的任何不同之处都没有提交提交

当像 gitk 这样的图形查看器向您显示未提交更改的节点时,它要么将索引和工作树混为一谈,要么忽略这两者之一。无论哪种方式,它所显示的都不是事实!尽管如此,知道您确实有未提交的更改还是很有价值的,无论这些文件是暂存的、未暂存的还是两者兼有(例如,可能README.md 已暂存而其他文件未暂存)。很高兴有办法展示这一点。


1这既是夸大又是低估。由于您可以创建新文件或删除现有文件,因此有时索引和/或工作树的版本在 HEAD 中不存在,反之亦然。这就是夸大其词的地方:某些文件可能只有一个或两个版本。同时,您可以在任何时间提取any提交的any文件版本,所以这是轻描淡写的——但HEAD提交版本特别重要,因为它是 git status 在与索引进行比较时将使用的版本。最后,在处理存在冲突的合并时还有另一种特殊情况:在这种情况下,索引本身包含(最多)三个版本的冲突文件,因此您最终会获得每个文件的更多同时可用版本.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2019-07-19
    • 2020-09-14
    • 2019-09-01
    相关资源
    最近更新 更多