【问题标题】:I can't see changed files on "commit changes" screen in Android Studio我在 Android Studio 的“提交更改”屏幕上看不到更改的文件
【发布时间】:2016-11-06 03:04:11
【问题描述】:

当我转到VCS>Commit changes 时,我看到以下屏幕:

我可能误按了某个按钮或某事,从那以后我无法提交整个项目,只能提交一个文件(.iml 文件)。
为什么我看不到项目中的任何其他文件?

【问题讨论】:

  • 两种可能:1.它是你上次提交后唯一改变的文件,2.其他文件在.gitignore中,git不跟踪
  • 您已更改您的.iml 文件之一。没什么大不了。如果您不想更改,只需 git checkout -- Oklahoma.iml 文件即可重置它。如果您确实想要更改,请提交。

标签: git android-studio push commit


【解决方案1】:

首要任务

正如你之前得到的答案中提到的,你不能像你所说的那样提交整个项目。您只能提交尚未记录的更改。
牢记这一点,如果您看到“提交更改”屏幕中没有文件,则无需惊慌。对文件所做的更改是安全可靠的,它们已被 git 记录下来,您不会丢失这些更改。

尽管如此,不同意前面的答案。据我了解,您对项目进行了一些更改,但现在找不到它们。正如您在问题中所说的那样 - 您记得偶然按下了某些东西,现在这些文件已经从您能够提交的文件列表中“消失”了。

问题的可能原因

在这种情况下,让我们一起尝试找出这些变化可能在哪里。
有多种可能性:

  1. 您可能已选择不将文件添加到 git
  2. 您可能已将文件添加到忽略列表
  3. 您可能已经隐藏了这些更改
  4. 您可能已提交更改但尚未将其推送到远程存储库

首先,让我们介绍一下 git 记录更改的方式 -

记录对存储库的更改

Git 正在跟踪您的文件,以查看文件是否有任何更改。如果是这样,git 会注意到更改,您将能够提交它们。所有跟踪的文件都以“未修改”开头。然后,当您编辑它们时,它们会被标记为“已修改”。
当您选择提交文件时,git 将为提交做好准备,询问您要提交哪个文件,这些文件将被标记为“暂存”。
提交完成后,所有文件都回到“未修改”状态。

您可以阅读“Git Basics”一书中的解释以获取更多信息:

请记住,工作目录中的每个文件都可以位于两个文件之一 状态:跟踪或未跟踪。跟踪的文件是在 最后一张快照;它们可以是未修改的、修改的或暂存的。未追踪 文件就是一切——工作目录中的任何文件 不在您的上一个快照中,也不在您的暂存区域中。什么时候 您首先克隆一个存储库,您的所有文件都将被跟踪并 未修改,因为 Git 刚刚检查了它们而您还没有编辑 任何事物。

当您编辑文件时,Git 将它们视为已修改,因为您已经 自您上次提交以来更改了它们。你暂存这些修改过的文件 然后提交所有分阶段的更改,然后循环重复。


向 Git 添加文件

按照规则,Android Studio 会根据文件在 git 中的状态标记您目录中的文件。

  • 当名称显示为蓝色时,表示文件已被修改。
  • 当名称显示为绿色时,表示该文件是一个新文件,并且 已添加到 git 跟踪的文件集中。
  • 当名称显示为红色时,表示该文件未被跟踪。
  • 当名称以白色/灰色显示时,表示文件未修改。

如果您看到存储库中的某些文件名显示为红色,您可以:
Right Click => Git => Add 并且它们将被 git 跟踪,您将能够在尝试提交时看到它们。


Git 忽略列表

Gitignore 列表可让您指定有意忽略的未跟踪文件。
忽略列表基本上是一个文件,其中包含您希望 git 取消跟踪的工作目录中文件的位置。此列表将防止将未跟踪的文件添加到 git 跟踪的文件集中(请记住,git 将继续跟踪任何已被跟踪的文件)。
如果这是您的情况,将文件添加到 gitignore 列表会使其从您可以提交的文件列表中“消失”。
因此,为了将其取回并再次提交,您需要将其从 gitignore 列表中删除。
为此,您需要在 git 命令行中输入 git add -A 命令。此命令将暂存您目录中的所有文件(新的、修改的、已删除的),它将解决您的问题。
此外,您应该查看在 Android Studio 上配置的 Ignored Files 列表,并确保您要提交的文件不存在。
要访问 Ignored Files 列表,请转至 Project => Settings => Version Control => Ignored Files(Windows 和 Linux)或 Android Studio menu => Preferences => Version Control => Ignored Files (MacOS)。在那里,您可以将其从“忽略的文件”列表中删除。


隐藏的更改

来自“Git 基础”一书:

通常,当您一直在处理项目的一部分时,事情就在 一个混乱的状态,你想切换分支来处理一下 别的东西。问题是,你不想提交 完成了一半的工作,以便您稍后可以回到这一点。这 这个问题的答案是 git stash 命令。

Stashing 获取工作目录的脏状态——也就是说, 您修改过的跟踪文件和分阶段的更改 - 并将其保存在 您可以随时重新应用的未完成更改堆栈。

您可能已经隐藏了您的文件,现在它们似乎没有被修改,您无法提交它们。
为了取消存储它们(单击项目的主文件夹):
Right Click => Git => Repository => UnStash Changes…,然后从列表中选择最近的存储并单击“Apply Stash”
如果您在列表中看不到任何内容,或者如果列表不包含您所做的最新更改,那么这不是您的情况。


提交更改但不推送它们

最后一种可能的选择是您已经提交了更改,但尚未将它们推送到远程存储库,因此您在云/其他计算机上看不到它们。
如上所述,git commit 命令会记录对文件的更改,但这里最重要的是会记录在本地存储库中。
为了同时更新远程存储库,您还需要使用 git push 命令推送这些更改。
Android Studio 提供了两种更改:提交更改以及提交和推送更改。
您可能已选择提交更改,在这种情况下:

  • 从本地存储库的角度来看:
    变化被记录下来, 文件回到“未修改”模式,你看不到它们 提交屏幕上不再显示,直到下一个 你将做出的改变。
  • 从远程存储库的角度来看:
    由于您没有执行推送命令,因此没有更新。

这是来自Oliver Steele 的漂亮图片,它解释了 git 模型和命令:

为了解决这个问题,您只需通过以下方式将更改推送到远程存储库:
Right click => Git => Repository => Push。就这么简单。


进一步阅读

这里有一些有用的链接:

希望我的回答能帮助您解决问题:)

【讨论】:

    【解决方案2】:

    Git 只提交对文件的更改,因此除非您更改项目中的每个文件,否则您将无法暂存所有文件以进行提交。提交快照将包含更改的文件以及所有其他文件,因此不必担心丢失它们。

    【讨论】:

      【解决方案3】:

      就我而言,发生的事情是我的 Android Studio 版本控制偏好有两个“git 根”,其中一个是错误的。我猜这搞砸了查找修改文件的算法。详情请见this StackOverflow post

      其他要检查的内容包括命令行。做一个git status,你看到修改过的文件了吗?事实上,这应该是首先要检查的事情之一。如果您确实看到带有git status 的文件,则问题可能是您的Android Studio 设置错误配置,用于版本控制和/或版本控制->Git。

      其他要检查的内容也可以在我链接的同一个 Stack Overflow 帖子中找到。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-13
        • 1970-01-01
        • 2012-10-02
        • 1970-01-01
        • 2015-06-20
        • 2018-02-24
        • 1970-01-01
        • 2015-08-23
        相关资源
        最近更新 更多