我无法在"提交更改" Android Studio中的屏幕

时间:2016-07-04 11:34:09

标签: git android-studio push commit

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

my current "commit changes" screen in Android Studio

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

3 个答案:

答案 0 :(得分:5)

First Things First

正如你之前得到的答案所述,你无法像你所说的那样承诺整个项目。您只能提交尚未记录的更改 请记住,如果您发现“提交更改”屏幕中没有文件,则无需恐慌。对文件的更改是安全可靠的,它们已由git记录,您不会丢失这些更改。

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

问题的可能原因

在这种情况下,让我们一起弄清楚这些变化的位置 有很多可能性:

  1. 您可能选择不将文件添加到git
  2. 您可能已将文件添加到忽略列表
  3. 您可能隐藏了这些更改
  4. 您可能已经提交了更改但未将其推送到远程存储库
  5. 首先,让我们介绍一下git记录变化的方式 -

    记录对存储库的更改

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

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

      

    请记住,工作目录中的每个文件都可以是两个文件中的一个   状态:跟踪或未跟踪。跟踪文件是文件中的文件   最后快照;它们可以不被修改,修改或分阶段。未跟踪   文件是其他所有文件 - 工作目录中的任何文件   不是你的最后一个快照,不在你的临时区域。什么时候   首先克隆存储库,将跟踪所有文件   未经修改,因为Git刚刚检查出来而你没有编辑过   任何东西。

         

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

    The lifecycle of the status of your files

    将文件添加到Git

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

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

    Colors of File According to their Git Status

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

    Git Ignore List

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

    Stashed Changes

    来自“Git Basics”一书:

      

    通常情况下,当你在项目的一部分工作时,事情就会发生   一个混乱的状态,你想切换分支一点点工作   别的。问题是,你不想做提交   半完成的工作只是为了你以后可以回到这一点。该   这个问题的答案是git stash命令。

         

    Stashing采用工作目录的脏状态 - 也就是说,   您修改的跟踪文件和暂存的更改 - 并将其保存在   一堆未完成的更改,您可以随时重新申请。

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

    承诺改变而不是推动它们

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

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

    这是来自Oliver Steele的精彩图片,它解释了git模型和命令:
    Git data stores diagram

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

    进一步阅读

    以下是一些有用的链接:

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

在我的情况下,发生的事情是我的Android Studio版本控制偏好设置有两个“ git roots”,其中之一是错误的。我猜这搞砸了寻找修改文件的算法。有关更多详细信息,请参见this StackOverflow post

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

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