Can';认真地说,不要在git中添加文件
已解决,如接受答案下的注释所述 我多年来一直在使用Git,我真的很惊讶,我有一个特定的文件,我不能添加到我的一个回购的暂存区!我不想删除和重新创建回购协议,但想了解发生了什么并修复它。另外,现在我担心可能还有其他文件没有添加到回购协议中(或其他回购协议中) 我有一个repo,我刚刚提交并成功推送了一堆文件,然后我意识到其中一个,Can';认真地说,不要在git中添加文件,git,git-add,Git,Git Add,已解决,如接受答案下的注释所述 我多年来一直在使用Git,我真的很惊讶,我有一个特定的文件,我不能添加到我的一个回购的暂存区!我不想删除和重新创建回购协议,但想了解发生了什么并修复它。另外,现在我担心可能还有其他文件没有添加到回购协议中(或其他回购协议中) 我有一个repo,我刚刚提交并成功推送了一堆文件,然后我意识到其中一个,init.el,没有上传。 这就是我所拥有的: 运行git add init.el不会产生任何输出 在任何.gitignore文件中(在当前文件夹、子文件夹或父目录之一
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 add init.el
的文件,没有显示任何输出,并且文件仍然从暂存区域丢失(我已经通过git status
,git diff--cached
以及提交和推送(参见下一行))检查了这一点)。
尝试提交、推送并仔细检查Github中发生的情况会确认该文件尚未添加
你永远不会停止学习,是否有任何我不知道的可能触发这种行为的标准,或者这是一个错误,因此有没有办法修复回购
编辑,回答一条评论
提供pwd
/Users/my\u user/.my\u spacemacs.d
cat.gitignore
给出find-名称“.gitignore”
- 最后,
给出cat./spacemacs\u d_backup2020/.gitignore
让我们来谈谈git在和它说话时说的话。首先,这里是一个文件夹,其中包含一些文件:
$ ls
a.txt b.txt
现在,我将尝试向临时区域添加一个.txt:
$ git add a.txt
$
嗯,吉特什么也没说。就像你报道的那样:
运行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 status
,git diff--cached
你还说,
当我运行git ls files--others-I--exclude standard
好的,我也来试试:
$ git ls-files --others -i --exclude-standard
$
没什么!天哪,这太糟糕了。为什么不在暂存区添加一个.txt呢
因为它已经在暂存区中了。这里的问题不是a.txt不在暂存区中,而是对暂存区的误解——可能是对git本身的误解
这里有一件事要记住:
- 每次提交都包含所有文件
- 默认情况下,每个新提交包含与上一次提交相同的所有文件。(唯一的区别是您已更改的文件。)
- 默认情况下,暂存区域包含上次提交中的所有文件
- 当你问诸如
或git status
之类的问题时,git只告诉你什么是新的和不同的。它不报告存在什么git diff
git diff--cached
时,git没有提到a.txt,因为diff
表示“差异”,并且暂存区域中的a.txt与上次提交中的a.txt没有区别
但这并不意味着a.txt不在最后一次提交中或不在暂存区域中。相反,它的意思正好相反。它意味着它在这两个位置
现在我们来谈谈清单
假设我们想知道暂存区域中有哪些文件。这就是git ls files
的用途,简单明了:
$ git ls-files
a.txt
b.txt
看,它在那里!a.txt毕竟在那里!好的,让我们假设我们想知道最近提交的内容。记住,最近提交的内容也是上一次提交中的内容,之前的提交,以及之前的提交,除了我们每次可能执行的任何更改。每个提交都包含所有文件,按默认值。因此,如果a.txt曾经提交过,那么查看它是否在最新提交中就足够了。下面是如何做到这一点:
$ git ls-tree --name-only HEAD
a.txt
又来了
所以你看,a.txt毕竟并没有失败,只是我不明白git告诉我的是什么
最后,你还说
尝试提交、推送和双重检查Github中发生的情况会确认文件尚未添加
嗯,我不能解释这个问题。但是我不能回头看看你在GitHub做什么——GitHub很难使用。也许问题只是不知道如何查看。如果你在本地的分支上,你提交并推送,然后去GitHub查找文件,你可能找不到它,因为GitHub默认情况下是我没带你去看分店
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: b.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
$ git ls-files --others -i --exclude-standard
$
$ git ls-files
a.txt
b.txt
$ git ls-tree --name-only HEAD
a.txt