我的GitHub存储库中有2个目录。我想删除其中一个。如果不删除并重新创建整个存储库,我怎么能这样做?
你可以用两个目录签出'master';
git rm -r one-of-the-directories
git commit -m "Remove duplicated directory"
git push origin <your-git-branch> (typically 'master', but not always)
正如评论中所提到的,你通常要做的是从git中删除这个目录,但不要完全从文件系统中删除它(本地)
在这种情况下使用:
git rm -r --cached myFolder
您可以使用Attlasian Source Tree(Windows)(https://www.atlassian.com/software/sourcetree/overview)。只需从树中选择文件,然后按下顶部的“删除”按钮。文件将从本地存储库和本地git数据库中删除。然后提交,然后推送。
我的一位同事建议我认为强大的BFG Repo-Cleaner。它不仅可以删除不需要的数据,还可以从任何相关的提交信息中清除存储库。
要添加新目录:
mkdir <YOUR-DIRECTORY>
但是现在Git并不知道这个新目录,因为Git保留文件的轨道而不是目录DIRECTORY
git status
Git不会意识到我们所做的更改,因此我们添加了隐藏的.keep
文件,以便通过这一新变化让Git意识到。
touch /YOUR-directory/.keep
现在,如果你点击git status
,Git会意识到这些变化。
如果要删除目录,则应使用此命令。
rm -r <YOUR-DIRECTORY>
如果您使用git status
进行检查,您将看到该目录已被删除。
在删除任何内容之前,第一个git命令需要知道你是谁
我之前已经提交了该文件夹,并且想要删除历史记录中的目录。
我做了以下事情:
将文件夹添加到.gitignore
:
echo Folder_Name/ >> .gitignore
从所有提交中删除:
git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch Folder_Name/' --prune-empty --tag-name-filter cat -- --all
从旧提交中删除引用:
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
确保完全删除所有旧参考
rm -Rf .git/logs .git/refs/original
执行垃圾收集
git gc --prune=all --aggressive
推动您对在线存储库的更改:
git push
你在这里完成了。
但是您可以通过以下方式将所有更改推送到所有分支:但请小心使用此命令!
git push origin --all --force
git push origin --tags --force
之后,该文件夹已从git中删除,但未从本地磁盘中删除。
删除目录的步骤
git rm -r --cached FolderName
git commit -m "Removed folder from repository"
git push origin master
在下次提交中忽略该文件夹的步骤
要在下次提交时忽略该文件夹,请在root中创建一个名为.gitignore的文件,并将该文件夹名称放入其中。您可以根据需要添加任意数量
.gitignore文件将如下所示
/FolderName
如果由于某种原因,karmakaze所说的不起作用,您可以尝试删除您想要使用的目录或使用您的文件系统浏览器(例如,在Windows文件资源管理器中)。删除目录后,发出命令:
git add -A
然后
git commit -m 'deleting directory'
然后
git push origin master
。
你可以试试这个:git rm -rf <directory_name>
它会强制删除目录。
如果删除目录中的文件(使用git rm
作为其他答案解释),那么就git而言,该目录不再存在。您不能提交空目录,也不能删除它。
这与subversion不同,你必须明确svn rm emptyfolder/
,顺便说一下为什么git的man
页面将自己描述为“愚蠢的内容跟踪器”
关于"How do I add an empty directory to a git repository"的答案链接到FAQ on this subject:
目前git索引(临时区域)的设计只允许列出文件,没有人能够进行更改以允许空目录已经足够关注这种情况来弥补它。
在其中添加文件时会自动添加目录。也就是说,目录永远不必添加到存储库,并且不会自己跟踪。
你可以说“
git add <dir>
”,它会在那里添加文件。如果您确实需要在结帐中存在目录,则应在其中创建一个文件。 .gitignore很适合这个目的;您可以将其留空,或填写您希望在目录中显示的文件的名称。
转到您的git目录,然后键入以下命令:rm -rf <目录名称>
删除目录后,通过以下方式提交更改:git commit -m“您的提交消息”
然后只需在远程GIT目录上推送更改:git push origin <Branch name>
您可以在本地删除该文件夹,然后按,如下所示:
git rm -r folder_name
git commit -m "your commit"
git push origin master
我通常使用git add --all
从远程存储库中删除文件/文件夹
rm -r folder_name
git add --all
git commit -m "some comment"
git push origin master
master
可以被存储库的任何其他分支替换。
用于删除空文件夹
我想删除一个我创建的空目录(文件夹),git无法删除它,经过一些研究我学会了Git不跟踪空目录。如果您的工作树中有一个空目录,则只需将其删除即可
rm -r folderName
没有必要涉及Git。