当我转到VCS>Commit changes
时,我会看到以下屏幕:
我可能错误地按了一些按钮或某些东西,从那以后我就不能提交整个项目,只提交一个文件(.iml文件)。
为什么我看不到项目中的其他任何文件?
答案 0 :(得分:5)
正如你之前得到的答案所述,你无法像你所说的那样承诺整个项目。您只能提交尚未记录的更改 请记住,如果您发现“提交更改”屏幕中没有文件,则无需恐慌。对文件的更改是安全可靠的,它们已由git记录,您不会丢失这些更改。
尽管如此,不同意之前的回答。根据我的理解,您对项目进行了一些更改,但现在无法找到它们。正如你在问题中所说的那样 - 你记得偶然按下某些东西,现在这些文件已从你能够提交的文件列表中“消失”。
在这种情况下,让我们一起弄清楚这些变化的位置 有很多可能性:
首先,让我们介绍一下git记录变化的方式 -
Git正在跟踪您的文件,以查看文件是否有任何更改。如果是这样,git会注意到这些更改,您将能够提交它们。所有跟踪的文件都以“未修改”开头。然后,当您编辑它们时,它们被标记为“已修改”
当您选择提交文件时,git会为提交做好准备,询问您要提交哪个文件,并将其标记为“暂存”。
提交完成后,所有文件都恢复到“未修改”状态。
您可以阅读“Git Basics”一书中的说明以获取更多信息:
请记住,工作目录中的每个文件都可以是两个文件中的一个 状态:跟踪或未跟踪。跟踪文件是文件中的文件 最后快照;它们可以不被修改,修改或分阶段。未跟踪 文件是其他所有文件 - 工作目录中的任何文件 不是你的最后一个快照,不在你的临时区域。什么时候 首先克隆存储库,将跟踪所有文件 未经修改,因为Git刚刚检查出来而你没有编辑过 任何东西。
当您编辑文件时,Git会将它们视为已修改,因为您已经 自上次提交以来更改了它们。您暂存这些已修改的文件 然后提交所有分阶段的更改,循环重复。
根据规则,Android Studio会根据其在git中的状态标记目录中的文件。
如果您发现存储库中的某些文件名显示为红色,则可以:
Right Click => Git => Add
他们将被git跟踪,当你试图提交时,你将能够看到它们。
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)。在那里,您可以将其从“忽略的文件”列表中删除。
来自“Git Basics”一书:
通常情况下,当你在项目的一部分工作时,事情就会发生 一个混乱的状态,你想切换分支一点点工作 别的。问题是,你不想做提交 半完成的工作只是为了你以后可以回到这一点。该 这个问题的答案是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
。那么简单。
以下是一些有用的链接:
希望我的回答能帮助你解决问题:)
答案 1 :(得分:0)
Git只提交对文件的更改,因此除非您更改项目中的每个文件,否则您将无法为提交暂存所有文件。提交快照将包含已更改的文件以及其他所有文件,因此请不要担心丢失它们。
答案 2 :(得分:0)
在我的情况下,发生的事情是我的Android Studio版本控制偏好设置有两个“ git roots”,其中之一是错误的。我猜这搞砸了寻找修改文件的算法。有关更多详细信息,请参见this StackOverflow post。
要检查的其他内容包括命令行。做git status
,您看到修改过的文件了吗?实际上,这应该是要检查的第一件事。如果您确实看到带有git status
的文件,则问题可能是您的Android Studio设置针对版本控制和/或版本控制-> Git的配置错误。
其他要检查的内容也可以在我链接的同一Stack Overflow帖子中找到。