1

我的 git repo 最初的结构是这样的:

Folder
 - file1
 - file2
 - file3
 -....
 - file30

这有点难以管理,所以我在本地将结构更改为:

Folder
 Subfolder
   - file1
   - file2
   - file3
   -....
   - file30
 
 Subfolder2
 ...

基本上在我的仓库中,我做了几次右键单击 > 新文件夹,然后将所有文件拖到这些新文件夹中。

然后我做了:

git add *
git commit -m "foobar"
git push

但是,当我在 github 上查看时,我看到我的新文件夹结构很好,但是我所有的旧文件也都在那里,所以看起来我只是将我的文件复制并粘贴到他们的新文件夹中,而不是移动它们,这正是我想要的.

Folder
 Subfolder
   - file1
   - file2
   - file3
   -....
   - file30
 
 Subfolder2
 ...

 - file1
 - file2
 - file3
 -....
 - file30

您可以在下面看到我的本地文件结构和包含所有额外“松散”文件的 github 存储库。

在此处输入图像描述

谁能帮我从我的 github 仓库中删除这些“松散”的文件?

4

1 回答 1

0

问题

Git 并没有真正按照您的想法记录或跟踪目录,并且文件添加到索引并不一定会删除丢失的文件,即使假设您实际上移动或删除了旧文件。你可以看到 git 认为在索引中发生了什么变化git status

此外,shell glob*只会将当前目录中与 .gitignore 文件中的排除项不匹配的项目联网。调用ls *以查看 shell 认为您要添加到 git 索引中的内容。

解决方案

如果您对整个目录树进行了重大更改,则可以更新整个索引,而不是手动更改索引。例如:

# change to your repo's top-level directory
cd "$(git rev-parse --show-toplevel)"

# add the entire directory tree to the index
git add .

# update all blobs/trees that git is indexing
git commit -a

这应该会导致 git 之前跟踪的重命名、移动和删除的文件或目录被更新。使用您当前的命令,您只需使用 shell glob 提交您添加到索引的顶级更改*。这种替代方法将更新您的整个工作树,同时仍然尊重 .gitignore。

于 2020-08-01T20:35:43.470 回答