我在 Android Studio 的 "commit changes" 屏幕上看不到更改的文件
I can't see changed files on "commit changes" screen in Android Studio
当我转到 VCS>Commit changes
时,我看到以下屏幕:
我可能误按了某个按钮或其他东西,从那以后我无法提交整个项目,只能提交一个文件(.iml 文件)。
为什么我看不到项目中的任何其他文件?
Git 仅提交对文件的更改,因此除非您更改项目中的每个文件,否则您将无法暂存所有文件以进行提交。提交快照将包含更改的文件以及所有其他文件,所以不用担心丢失它们。
要事第一
正如你之前得到的答案中提到的,你不能像你说的那样提交整个项目。您只能提交尚未记录的更改。
请记住,如果您在“提交更改”屏幕中看到没有文件,则无需恐慌。对您的文件所做的更改是安全的,它们已被 git 记录下来,您不会丢失这些更改。
不过,不同意前面的回答。据我了解,您对项目进行了一些更改,但现在找不到它们。正如您在问题中所说 - 您记得不小心按下了某个东西,现在这些文件从您能够提交的文件列表中“消失”了。
问题的可能原因
既然如此,让我们一起试着弄清楚这些变化在哪里。
有多种可能性:
- 您可能 select 没有将文件添加到 git
- 您可能已将文件添加到忽略列表
- 您可能隐藏了这些更改
- 您可能已提交更改但尚未将它们推送到远程存储库
首先介绍一下git记录变化的方式-
记录对存储库的更改
Git 正在跟踪您的文件以查看文件是否有任何更改。如果是这样,git 会注意到更改,您将能够提交它们。所有跟踪的文件都以“未修改”开头。然后,当您编辑它们时,它们会被标记为“已修改”。
当您选择提交文件时,git 将为提交做好准备,询问您要提交哪个文件,这些文件将被标记为“暂存”。
提交完成后,所有文件都回到“未修改”状态。
您可以阅读“Git基础知识”一书中的解释以获取更多信息:
Remember that each file in your working directory can be in one of two
states: tracked or untracked. Tracked files are files that were in the
last snapshot; they can be unmodified, modified, or staged. Untracked
files are everything else – any files in your working directory that
were not in your last snapshot and are not in your staging area. When
you first clone a repository, all of your files will be tracked and
unmodified because Git just checked them out and you haven’t edited
anything.
As you edit files, Git sees them as modified, because you’ve
changed them since your last commit. You stage these modified files
and then commit all your staged changes, and the cycle repeats.
正在将文件添加到 Git
根据规则,Android Studio 将根据文件在 git 中的状态标记您目录中的文件。
- 当名称显示为蓝色时,表示文件已修改。
- 当名称显示为绿色时,表示该文件是新文件,并且
已添加到 git.
跟踪的文件集中
- 当名称显示为红色时,表示文件未被跟踪。
- 当名称出现在white/gray中时,表示该文件未被修改。
如果您发现存储库中的某些文件名显示为红色,您可以:
Right Click => Git => Add
并且它们将被 git 跟踪,您将能够在尝试提交时看到它们。
Git 忽略列表
Git忽略列表可让您指定要忽略的有意未跟踪的文件。
忽略列表基本上是一个文件,其中包含您希望 git 取消跟踪的工作目录中文件的位置。此列表将防止未跟踪的文件添加到 git 跟踪的文件集中(请记住 git 将继续跟踪任何已被跟踪的文件)。
如果是这种情况,将文件添加到 git 忽略列表将使它从您能够提交的文件列表中“消失”。
因此,为了取回并再次提交,您需要将其从 gitignore 列表中删除。
为此,您需要在 git 命令行中键入 git add -A
命令。此命令将暂存您目录中的所有文件(新建、修改、删除),它将解决您的问题。
此外,您应该查看在 Android Studio 上配置的忽略文件列表,并确保您要提交的文件不在那里。
要访问忽略的文件列表,请转至 Project => Settings => Version Control => Ignored Files
(Windows 和 Linux)或 Android Studio menu => Preferences => Version Control => Ignored Files
(MacOS)。在那里,您可以将其从“忽略的文件”列表中删除。
隐藏更改
来自“Git 基础知识”一书:
Often, when you’ve been working on part of your project, things are in
a messy state and you want to switch branches for a bit to work on
something else. The problem is, you don’t want to do a commit of
half-done work just so you can get back to this point later. The
answer to this issue is the git stash command.
Stashing takes the dirty state of your working directory — that is,
your modified tracked files and staged changes — and saves it on a
stack of unfinished changes that you can reapply at any time.
您可能隐藏了您的文件,现在它们似乎没有被修改,您无法提交它们。
为了取消隐藏它们(单击项目的主文件夹):
Right Click => Git => Repository => UnStash Changes…
,然后 select 列表中的最新存储并单击 “Apply Stash”
.
如果您在列表中看不到任何内容,或者如果列表不包含您所做的最新更改,那么这不是您的情况。
提交更改但不推动它们
最后一个可能的选择是您已经提交了更改,但尚未将它们推送到远程存储库,因此您在 cloud/other 台计算机上看不到它们。
如上所述,git commit 命令会记录对文件的更改,但这里最重要的是,它会记录在本地存储库中。
为了同时更新远程存储库,您还需要使用 git push 命令推送这些更改。
Android Studio 提供两种更改:提交更改和提交并推送更改。
您可能已选择提交更改,在这种情况下:
- 从本地存储库的角度来看:
记录的变化,
文件回到“未修改”模式,你看不到它们
在提交屏幕上再出现直到下一个
您将做出的改变。
- 从远程仓库的角度来看:
因为你没有执行推送命令,所以没有更新。
这是一张来自 Oliver Steele 的精美图片,它解释了 git 模型和命令:
为了解决这个问题,您所要做的就是通过以下方式将更改推送到您的远程存储库:
Right click => Git => Repository => Push
。就这么简单。
进一步阅读
以下是一些有用的链接:
- Git Basics - Working with Remotes
- Git Basics - Recording Changes to the Repository
- Git Tools - Stashing and Cleaning
希望我的回答对您的问题有所帮助:)
就我而言,发生的情况是我的 Android Studio 版本控制首选项有两个 "git roots",其中一个是错误的。我猜这弄乱了查找修改文件的算法。有关详细信息,请参阅 。
其他要检查的内容包括命令行。做一个git status
,你看到修改后的文件了吗?事实上,这应该是首先要检查的事情之一。如果您确实看到带有 git status
的文件,问题可能是您的 Android Studio 版本控制和/或版本控制设置配置错误->Git.
其他要检查的内容也可以在我链接的同一个 Stack Overflow post 中找到。
当我转到 VCS>Commit changes
时,我看到以下屏幕:
我可能误按了某个按钮或其他东西,从那以后我无法提交整个项目,只能提交一个文件(.iml 文件)。
为什么我看不到项目中的任何其他文件?
Git 仅提交对文件的更改,因此除非您更改项目中的每个文件,否则您将无法暂存所有文件以进行提交。提交快照将包含更改的文件以及所有其他文件,所以不用担心丢失它们。
要事第一
正如你之前得到的答案中提到的,你不能像你说的那样提交整个项目。您只能提交尚未记录的更改。
请记住,如果您在“提交更改”屏幕中看到没有文件,则无需恐慌。对您的文件所做的更改是安全的,它们已被 git 记录下来,您不会丢失这些更改。
不过,不同意前面的回答。据我了解,您对项目进行了一些更改,但现在找不到它们。正如您在问题中所说 - 您记得不小心按下了某个东西,现在这些文件从您能够提交的文件列表中“消失”了。
问题的可能原因
既然如此,让我们一起试着弄清楚这些变化在哪里。
有多种可能性:
- 您可能 select 没有将文件添加到 git
- 您可能已将文件添加到忽略列表
- 您可能隐藏了这些更改
- 您可能已提交更改但尚未将它们推送到远程存储库
首先介绍一下git记录变化的方式-
记录对存储库的更改
Git 正在跟踪您的文件以查看文件是否有任何更改。如果是这样,git 会注意到更改,您将能够提交它们。所有跟踪的文件都以“未修改”开头。然后,当您编辑它们时,它们会被标记为“已修改”。
当您选择提交文件时,git 将为提交做好准备,询问您要提交哪个文件,这些文件将被标记为“暂存”。
提交完成后,所有文件都回到“未修改”状态。
您可以阅读“Git基础知识”一书中的解释以获取更多信息:
Remember that each file in your working directory can be in one of two states: tracked or untracked. Tracked files are files that were in the last snapshot; they can be unmodified, modified, or staged. Untracked files are everything else – any files in your working directory that were not in your last snapshot and are not in your staging area. When you first clone a repository, all of your files will be tracked and unmodified because Git just checked them out and you haven’t edited anything.
As you edit files, Git sees them as modified, because you’ve changed them since your last commit. You stage these modified files and then commit all your staged changes, and the cycle repeats.
正在将文件添加到 Git
根据规则,Android Studio 将根据文件在 git 中的状态标记您目录中的文件。
- 当名称显示为蓝色时,表示文件已修改。
- 当名称显示为绿色时,表示该文件是新文件,并且 已添加到 git. 跟踪的文件集中
- 当名称显示为红色时,表示文件未被跟踪。
- 当名称出现在white/gray中时,表示该文件未被修改。
如果您发现存储库中的某些文件名显示为红色,您可以:
Right Click => Git => Add
并且它们将被 git 跟踪,您将能够在尝试提交时看到它们。
Git 忽略列表
Git忽略列表可让您指定要忽略的有意未跟踪的文件。
忽略列表基本上是一个文件,其中包含您希望 git 取消跟踪的工作目录中文件的位置。此列表将防止未跟踪的文件添加到 git 跟踪的文件集中(请记住 git 将继续跟踪任何已被跟踪的文件)。
如果是这种情况,将文件添加到 git 忽略列表将使它从您能够提交的文件列表中“消失”。
因此,为了取回并再次提交,您需要将其从 gitignore 列表中删除。
为此,您需要在 git 命令行中键入 git add -A
命令。此命令将暂存您目录中的所有文件(新建、修改、删除),它将解决您的问题。
此外,您应该查看在 Android Studio 上配置的忽略文件列表,并确保您要提交的文件不在那里。
要访问忽略的文件列表,请转至 Project => Settings => Version Control => Ignored Files
(Windows 和 Linux)或 Android Studio menu => Preferences => Version Control => Ignored Files
(MacOS)。在那里,您可以将其从“忽略的文件”列表中删除。
隐藏更改
来自“Git 基础知识”一书:
Often, when you’ve been working on part of your project, things are in a messy state and you want to switch branches for a bit to work on something else. The problem is, you don’t want to do a commit of half-done work just so you can get back to this point later. The answer to this issue is the git stash command.
Stashing takes the dirty state of your working directory — that is, your modified tracked files and staged changes — and saves it on a stack of unfinished changes that you can reapply at any time.
您可能隐藏了您的文件,现在它们似乎没有被修改,您无法提交它们。
为了取消隐藏它们(单击项目的主文件夹):
Right Click => Git => Repository => UnStash Changes…
,然后 select 列表中的最新存储并单击 “Apply Stash”
.
如果您在列表中看不到任何内容,或者如果列表不包含您所做的最新更改,那么这不是您的情况。
提交更改但不推动它们
最后一个可能的选择是您已经提交了更改,但尚未将它们推送到远程存储库,因此您在 cloud/other 台计算机上看不到它们。
如上所述,git commit 命令会记录对文件的更改,但这里最重要的是,它会记录在本地存储库中。
为了同时更新远程存储库,您还需要使用 git push 命令推送这些更改。
Android Studio 提供两种更改:提交更改和提交并推送更改。
您可能已选择提交更改,在这种情况下:
- 从本地存储库的角度来看:
记录的变化, 文件回到“未修改”模式,你看不到它们 在提交屏幕上再出现直到下一个 您将做出的改变。 - 从远程仓库的角度来看:
因为你没有执行推送命令,所以没有更新。
这是一张来自 Oliver Steele 的精美图片,它解释了 git 模型和命令:
为了解决这个问题,您所要做的就是通过以下方式将更改推送到您的远程存储库:
Right click => Git => Repository => Push
。就这么简单。
进一步阅读
以下是一些有用的链接:
- Git Basics - Working with Remotes
- Git Basics - Recording Changes to the Repository
- Git Tools - Stashing and Cleaning
希望我的回答对您的问题有所帮助:)
就我而言,发生的情况是我的 Android Studio 版本控制首选项有两个 "git roots",其中一个是错误的。我猜这弄乱了查找修改文件的算法。有关详细信息,请参阅
其他要检查的内容包括命令行。做一个git status
,你看到修改后的文件了吗?事实上,这应该是首先要检查的事情之一。如果您确实看到带有 git status
的文件,问题可能是您的 Android Studio 版本控制和/或版本控制设置配置错误->Git.
其他要检查的内容也可以在我链接的同一个 Stack Overflow post 中找到。