不知何故,git得到了它,我有一个未跟踪的文件(一个目录已存在我的存储库很长一段时间,约17个月)。无论如何,我似乎无法说服git这不是一个未经跟踪的文件。此外,我无法重新添加有问题的文件。知道如何解决这个问题吗?
示例:
➜ git status
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# rosetta_tests/profile/tests/docking/
nothing added to commit but untracked files present (use "git add" to track)
我尝试添加目录并重新检查状态。
➜ git add rosetta_tests/profile/tests/docking/
➜ git status
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# rosetta_tests/profile/tests/docking/
nothing added to commit but untracked files present (use "git add" to track)
只是为了确定(来自我的源代码树的根目录)
➜ git add .
➜ git status
# On branch master
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# rosetta_tests/profile/tests/docking/
nothing added to commit but untracked files present (use "git add" to track)
这里发生了什么?我如何说服git自行修复?
修改
更多细节:
- 文件不在.gitignore
中- 相关文件夹中有三个跟踪文件,因此它不是空的
- 经过更多的挖掘,看起来这样的事情可能会因改变被跟踪文件夹的情况而产生。不幸的是,情况并非如此(双关语!)。文件夹名称从未改变过大小写。
- 停靠目录的内容:
➜ ls -lA rosetta_tests/profile/tests/docking/.
total 16
-rw-r--r-- 1 tim staff 2209 Jul 17 10:47 command
-rw-r--r-- 1 tim staff 260 Jul 17 10:47 flags
drwxr-xr-x 3 tim staff 102 Jul 17 10:47 input
答案 0 :(得分:19)
。在git add .
命令中引用“当前目录”。因此,运行git add .
将添加当前目录及其子目录中的所有文件。在运行git add
之前,您应确保自己位于正确的目录中。
git add -A
就是你想要的。它会添加所有内容。
答案 1 :(得分:10)
我通过运行
解决了这个问题git clean -f
答案 2 :(得分:4)
我遇到了同样的错误:没有大小写更改,没有.ignore问题,目录确实包含我绝对想保留的文件。添加目录,提交,git add -A
和其他补救措施没有任何效果。
我最后用“git clean”删除目录,然后再次检查dir中的文件。
这是我做的:
rex@sidekick> git status
# On branch master
# Your branch is ahead of 'origin/master' by 10 commits.
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# app/models/xSpecific/
nothing added to commit but untracked files present (use "git add" to track)
此时我制作了“xSpecific”目录的备份副本以防万一。然后我用'git clean'做了一个干运行(-n选项意味着“干运行”,-d使干净删除目录):
rex@sidekick> git clean -n -d
Would remove app/models/xSpecific/
经过双重和三重检查,我继续进行清洁(-f标志意味着“强制”,需要说服Git你是认真的。非常好的设计,如果你问我):
rex@sidekick> git clean -d -f
Removing app/models/xSpecific/
rex@sidekick> git status
# On branch master
# Your branch is ahead of 'origin/master' by 10 commits.
#
# Changed but not updated:
# (use "git add/rm <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# deleted: app/models/xSpecific/GetAddressesLog.java
# deleted: app/models/xSpecific/GetProductLog.java
#
no changes added to commit (use "git add" and/or "git commit -a")
到目前为止,这么好。该目录不再列出,但文件当然也已消失。我可以从备份中恢复它们,但这就是Git的用途:
rex@sidekick> git checkout -- app/models/xSpecific/GetAddressesLog.java
rex@sidekick> git checkout -- app/models/xSpecific/GetProductLog.java
rex@sidekick> git status
# On branch master
# Your branch is ahead of 'origin/master' by 10 commits.
#
nothing to commit (working directory clean)
庆祝的时刻!实际上,可能更容易克隆一个新的存储库副本并使用它,但通过这样做,我学到了一些新的东西:)。
答案 3 :(得分:2)
这为我解决了问题rm .git/fs_cache
答案 4 :(得分:2)
我得到了同样的问题,我解决了
git clean -f -n
答案 5 :(得分:1)
我有重要的未跟踪文件,不能像某些人一样运行git clean -f
答案提示。
我尝试添加目录并重新检查状态。
➜ git add rosetta_tests/profile/tests/docking/
似乎添加整个目录不会触发文件重新检查。
所以我尝试专门添加 一个据称未跟踪的文件,并且可以正常工作:
$ git status
On branch foo
Untracked files:
(use "git add <file>..." to include in what will be committed)
important.txt
foo/foo.java
foo/bar.java
foo/baz.java
foo/qux.java
nothing added to commit but untracked files present (use "git add" to track)
$ git add -- foo/foo.java
fatal: pathspec 'foo/foo.java' did not match any files
$ git status
On branch foo
Untracked files:
(use "git add <file>..." to include in what will be committed)
important.txt
nothing added to commit but untracked files present (use "git add" to track)
答案 6 :(得分:0)
当git add
由于子目录中的文件名太长而失败时,此错误为我弹出。 (就我而言,是node_modules中的内容)
在这种情况下,将一个内容为*
的.gitignore文件添加到node_modules文件夹中,使git add可以运行完成。
因此,请注意git add .
(或-A或--all)的命令输出,并确保它不会由于错误而过早停止。一旦应用了正确的.gitignore,我的所有“未跟踪”文件和文件夹均已成功添加,并且我能够提交并推送更改。
答案 7 :(得分:0)
重新创建文件或目录
mkdir -p rosetta_tests/profile/tests/docking/
然后再次将其删除。
rm -rf rosetta_tests/profile/tests/docking/