![](/img/trans.png)
[英]How do I remove untracked directory tree (submodule / sub-repository) from main git repository?
[英]How do I remove a directory from a Git repository?
如何從 Git 存儲庫中刪除包含文件的單個目錄?
您可以使用兩個目錄簽出“master”;
git rm -r one-of-the-directories // This deletes from filesystem
git commit . -m "Remove duplicated directory"
git push origin <your-git-branch> (typically 'master', but not always)
如評論中所述,您通常想要做的是從 git 中刪除此目錄,但不要從文件系統(本地)中完全刪除它
在這種情況下使用:
git rm -r --cached myFolder
刪除目錄的步驟
git rm -r --cached FolderName
git commit -m "Removed folder from repository"
git push origin master
在下一次提交中忽略該文件夾的步驟
要從下一次提交中忽略該文件夾,請在根文件夾(初始化 git 的主項目目錄)中創建一個名為.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 而言,該目錄不再存在。 您不能提交一個空目錄,也不能刪除一個。
這與顛覆不同,您必須明確svn rm emptyfolder/
,順便說一下,為什么 git 的man
頁將自己描述為“愚蠢的內容跟蹤器”
關於“如何將空目錄添加到 git 存儲庫”的答案鏈接到有關此主題的常見問題解答:
目前 git 索引(暫存區)的設計只允許列出文件,並且沒有足夠能力進行更改以允許空目錄的人足夠關心這種情況來補救它。
在目錄中添加文件時會自動添加目錄。 也就是說,目錄永遠不必添加到存儲庫中,並且不會自行跟蹤。
你可以說“
git add <dir>
”它會在那里添加文件。如果您確實需要一個目錄存在於結帳中,您應該在其中創建一個文件。 .gitignore 很適合這個目的; 您可以將其留空,或填寫您希望在目錄中顯示的文件的名稱。
我之前已經提交了該文件夾,並且還想刪除歷史記錄中的目錄。
我做了以下事情:
將文件夾添加到.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
從舊提交中刪除 refs:
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
確保完全刪除所有舊 refs
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 中刪除,但並未從本地磁盤中刪除。
Go 到您的 git 目錄,然后鍵入以下命令: rm -rf <目錄名稱>
刪除目錄后提交更改: git commit -m "Your Commit Message"
然后只需將更改推送到遠程 GIT 目錄: git push origin < Branch name >
用於刪除空文件夾
我想刪除我創建的空目錄(文件夾),git 無法刪除它,經過一些研究我了解到 Git 不跟蹤空目錄。 如果你的工作樹中有一個空目錄,你應該簡單地刪除它
rm -r folderName
無需涉及 Git。
可以在本地刪除文件夾,然后push,如下:
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
可以被存儲庫的任何其他分支替換。
您可以使用 Atlassian 源代碼樹 (Windows) ( https://www.atlassian.com/software/sourcetree/overview )。 只需 select 文件從樹中,然后按頂部的“刪除”按鈕。 文件將從本地存儲庫和本地 git 數據庫中刪除。 然后提交,然后推送。
如果您要從 GitHub web 應用程序中刪除目錄,您會發現一個刪除選項。 但是,之后它將為您提供要刪除的文件列表,底部有提交選項。 請記住提交它。 否則,目錄不會被刪除。
我的一位同事建議我認為強大的 BFG Repo-Cleaner 。 它不僅可以刪除不需要的數據,還可以從任何相關的提交信息中清除您的存儲庫。
首先 git 命令在刪除任何東西之前需要知道你是誰
添加新目錄:
mkdir <YOUR-DIRECTORY>
但是現在 Git 不知道這個新目錄,因為 Git 跟蹤文件而不是目錄
git status
Git 不會知道我們所做的更改,因此我們添加隱藏.keep
文件以使 Git 可以通過此新更改了解。
touch /YOUR-directory/.keep
現在,如果您點擊git status
Git 將會知道這些變化。
如果要刪除目錄,則應使用此命令。
rm -r <YOUR-DIRECTORY>
如果您使用git status
檢查,您將看到該目錄已被刪除。
2個答案的組合對我有用
git rm -r one-of-the-directories
git commit . -m "Remove duplicated directory"
git push
如果仍然顯示一些警告,請手動刪除文件
git filter-branch --tree-filter 'rm -rf path/to/your/file' HEAD
git push
嘗試rm -r -f <folder name>
或rm -r --force <folder name>
- 強制刪除文件夾
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.