微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

严重无法将文件添加到git

如何解决严重无法将文件添加到git

解决,如在接受的答案下方的评论中所述。

我已经使用Git多年了,我很惊讶我无法在我的一个存储库中添加一个特定文件到暂存区!我不想删除并重新创建存储库,而是要了解正在发生的事情并对其进行修复。另外,现在我担心也许还有其他文件没有被添加到仓库(或其他仓库)中。

我有一个回购,其中我刚刚提交并成功推送了一堆文件,然后我意识到其中的一个init.el没有上传。 这就是我所拥有的:

  • 运行git add init.el不会产生任何输出
  • 未在任何.gitignore文件中指定文件(或与之匹配的模式)(在当前文件夹,子文件夹或父目录之一中,直到根目录为止)。
  • 没有我偶然创建的父Git存储库,该存储库弄乱了该文件
  • 文件(或与之匹配的模式)未在.git/info/exclude
  • 中列出
  • 我运行git ls-files --others -i --exclude-standard时没有显示文件(或与之匹配的模式)

然后我尝试删除文件rm init.el,该文件正确地导致了

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
    modified:   .gitignore

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    deleted:    init.el

然后,我尝试做git rm init.el,这又正确地导致了

rm 'init.el'

但是放回文件,然后添加带有git add init.el文件显示输出,并且暂存区域中仍缺少该文件(我已经用git statusgit diff --cached进行了检查并通过提交和推送(请参见下一行)。 尝试提交,推送并仔细检查Github中发生的情况,确认未添加文件

您永远都不会停止学习,是否有任何我不知道的标准可能触发这种行为,或者这是一个错误,所以有什么办法可以修复该回购协议?

编辑,回答一条评论

  • pwd给出/Users/my_user/.my_spacemacs.d
  • cat .gitignore给出
.DS_Store
spacemacs_d_backup2020/
  • find . -name '.gitignore'给出
./spacemacs_d_backup2020/.gitignore
./.gitignore
  • 最后,cat ./spacemacs_d_backup2020/.gitignore给出
.DS_Store

解决方法

让我们谈谈git在与之交谈时所说的话。首先,这是一个其中包含一些文件的文件夹:

$ ls
a.txt   b.txt

现在,我尝试将 a.txt 添加到临时区域:

$ git add a.txt
$ 

嗯,git什么也没说。就像您报告的一样:

运行git add init.el不会产生任何输出

该死。为什么不添加它?好吧,让我们尝试其他事情:

$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
    new file:   b.txt

嗯,它没有列出 a.txt 。我很担心!好的,让我们尝试另一种方式:

$ git diff --cached
diff --git a/b.txt b/b.txt
new file mode 100644
index 0000000..ce01362
--- /dev/null
+++ b/b.txt
@@ -0,0 +1 @@
+hello

嗯,还是没有提到 a.txt 。就像您报告的一样:

暂存区域中仍缺少该文件(我已经用git statusgit diff --cached进行了检查

您还说过:

当我运行git ls-files --others -i --exclude-standard

时,文件(或与之匹配的模式)没有出现

好的,我也尝试一下:

$ git ls-files --others -i --exclude-standard
$

没事!天哪,这太可怕了。为什么不将 a.txt 添加到登台区域?

因为它已经在暂存区中。这里的问题不是 a.txt 不在登台区域中;而是这是对暂存区的误解,可能是对git本身的误解。

这是要记住的事情:

  • 每个提交都包含 all 个文件。

  • 默认情况下,每个 new 提交都包含与 previous 提交相同的所有文件。 (唯一的区别是您已更改了文件。)

  • 默认情况下,登台区域包含上次提交中的所有文件

  • 当您问诸如git statusgit diff之类的问题时,git只会告诉您的新内容和不同之处。它不报告存在的内容。

因此可以解释这个谜。在开始所有这些操作之前,我已经 添加并提交了 a.txt 。因此它在暂存区域中已经已经,在上一次提交中已经已经

因此,当我说git add a.txt时,git自言自语:“是的,a.txt已经在暂存区中了,并且没有改变,所以这里没有新内容,大家一起来,前进”,并且不会回复。

当我说git diff --cached时,git没有提到 a.txt ,因为diff的意思是“差异”,而 a.txt 在暂存区域中的位置与上次提交中的 a.txt 相同。

但是 none 都不意味着 a.txt 不在最后一次提交中,或者不在临时区域中。相反,这恰恰相反。这意味着在这两个地方都是

现在让我们来讨论列表

比方说,我们想知道临时区域中有哪些文件。这就是git ls-files的用途,简单明了:

$ git ls-files
a.txt
b.txt

看,那里!毕竟是 a.txt !好的,假设我们想知道最近一次提交中的内容。请记住,除了我们可能每次执行的任何 changes ,最近一次提交中的内容也与上一次提交中的内容,之前的提交,之前的提交以及之前的提交相同。默认情况下,每个提交都包含 all 个文件。因此,如果 a.txt 已提交 ever ,则足以查看它是否在 latest 提交中。这是这样做的方法:

$ git ls-tree --name-only HEAD
a.txt

又来了!

所以您看到, a.txt 毕竟没有失败。只是我不明白git在告诉我什么。

最后,你也说

尝试提交,推送并仔细检查Github中发生的情况,确认未添加文件

嗯,我无法解释那个。但是我看不到你在GitHub上所做的事情-GitHub很难使用。也许问题只是不知道外观的问题之一。如果您在本地的某个分支上,然后提交并推送,然后转到GitHub并寻找文件,则可能找不到它,因为GitHub默认情况下不会向您显示您正在处理的分支。它显示master(或main)。

因此,这是我对发生的事情的猜测:您在本地的一个分支上,并且您已经添加并提交了 init.el ,也许很久以前了,但是您没有更改从那以后。正如我所证明的那样,这将解释您在问题中描述的现象。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?