switch - 如何從當前的Git工作樹中刪除本地(未跟踪)文件?




git switch branch (20)

如何從當前工作樹中刪除未跟踪的本地文件?


以遞歸方式清理git存儲庫和所有子模塊

以下命令將以遞歸方式清除當前git存儲庫及其所有子模塊:

(git clean -d -x -f && git submodule foreach --recursive git clean -d -x -f)

刪除未跟踪文件的簡單方法

要刪除所有未跟踪的文件,最簡單的方法是先添加所有文件並重置repo ,如下所示

git add --all
git reset --hard HEAD

運行`git clean`命令時要小心。

在運行實際命令之前始終使用 -n ,因為它將顯示將刪除哪些文件。

git clean -n -d 
git clean -f -d

默認情況下, git clean將僅刪除未被忽略的未跟踪文件。 任何與.gitignore中的模式匹配的文件或其他忽略文件都不會被刪除。 如果您也想刪除這些文件,可以在clean命令中添加-x

git clean -f -d -x

使用clean命令還可以使用交互模式-i

git clean -x -i

另外

如果您不是100%確定刪除未提交的作品是安全的,則可以使用存儲

git stash --all

它還將清除您的目錄,但是您可以使用applypop 存儲來隨時靈活地檢索文件。 然後在稍後您可以使用以下方法清除您的存儲:

git stash drop // or clean


git clean -f to remove untracked files from working directory.

我在博客git-intro-basic-commands了一些基礎知識


git clean -fd刪除目錄

git clean -fX刪除被忽略的文件

git clean -fx刪除被忽略和未被忽略的文件

可以將以上所有選項組合使用

git clean -fdXx

檢查git手冊以獲得更多幫助


刪除此repo +子模塊中的所有額外文件夾和文件

這使您處於與新克隆相同的狀態。

git clean -ffdx

刪除此倉庫中的所有額外文件夾和文件,但不刪除其子模塊

git clean -fdx

只刪除額外的文件夾但不刪除文件(例如構建文件夾)

git clean -fd

刪除額外的文件夾+忽略的文件(但不刪除任何新添加的文件)

如果文件未被忽略且尚未簽入,那麼它將保留。 注意大寫字母X.

git clean -fdX

新的交互模式

git clean

好的,在命令行中使用git可以輕鬆刪除不需要的未跟踪文件和文件夾 ,只需這樣做:

git clean -fd

在執行之前仔細檢查 ,因為它將刪除文件和文件夾而不創建任何歷史記錄...

同樣在這種情況下, -f代表強制, -d代表目錄......

因此,如果您只想刪除文件,則只能使用-f

git clean -f

如果要刪除(目錄)和文件,則只能刪除未跟踪的目錄和文件,如下所示:

git clean -fd

此外,您可以使用-x標誌來包含git忽略的文件。 如果要刪除所有內容,這將非常有用。

並添加-i標誌,讓git要求您在移動中逐個刪除文件的權限。

如果您不確定並想先檢查一下,請添加-n標誌。

如果您不希望在成功刪除後看到任何報告,請使用-q

我還創建了下面的圖像,使其更具記憶性,特別是我看到很多人有時會混淆-f清理文件夾或以某種方式混合它!



使用git clean -f -d確保也刪除了目錄

然後,您可以使用git status檢查您的文件是否真的消失了。


如果您只想刪除“git status”未列出的文件

git stash save -u
git stash drop "[email protected]{0}"

我更喜歡這個'git clean'因為'git clean'會刪除被git忽略的文件,所以你的下一個版本將不得不重建所有內容,你也可能會失去你的IDE設置。


如果需要從特定子目錄中刪除未跟踪的文件,

git clean -f {dir_path}

並結合使用方法刪除未跟踪的目錄/文件和忽略的文件。

git clean -fxd {dir_path}

在此之後,您將僅在git status修改文件。


對我來說只有工作:

git clean -ffdx

在所有其他情況下,我收到一些子目錄的消息“跳過目錄”


我剛剛發明並嘗試過這種情況的生活方式(完美無缺):

git add .
git reset --hard HEAD

謹防! 在執行此操作之前,請務必提交任何所需的更改 (即使在非未跟踪的文件中)。


我喜歡git stash push -u因為你可以用git stash pop撤消它們。

編輯:我還找到了一種方法來顯示未藏匿的文件(例如git show [email protected]{0}^3 ) https://.com/a/12681856/338986

EDIT2: git stash save已棄用,支持push 。 謝謝@ script-wolf。


更好的方法是使用:git clean

git clean -d -x -f

這將刪除未跟踪的文件,包括目錄(-d)git (-x)忽略的文件。

另外,將-f參數替換為-n以執行dry-run-i以用於交互模式,它將告訴您將刪除的內容。


根據Git Documentation git clean

從工作樹中刪除未跟踪的文件

第1步是使用-n選項顯示要刪除的內容:

git clean -n

清潔步驟 - 注意:這將刪除文件

git clean -f
  • 要刪除目錄,請運行git clean -f -dgit clean -fd
  • 要刪除被忽略的文件,請運行git clean -f -Xgit clean -fX
  • 要刪除忽略和未忽略的文件,請運行git clean -f -xgit clean -fx

注意後兩個命令的X上的大小寫差異。

如果在配置clean.requireForce設置為“true”(默認值),則需要指定-f否則實際上不會發生任何事情。

再次查看git-clean文檔以獲取更多信息。

選項

-F

- 力

如果Git配置變量clean.requireForce未設置為false,則除非給定-f,-n或-i,否則git clean將拒絕運行。

-X

不要使用從.gitignore(每個目錄)和$ GIT_DIR / info / exclude讀取的標準忽略規則,但仍然使用-e選項給出的忽略規則。 這允許刪除所有未跟踪的文件,包括構建產品。 這可以使用(可能與git reset一起使用)來創建一個pristine工作目錄來測試一個乾淨的構建。

-X

僅刪除Git忽略的文件。 這可能有助於從頭開始重建所有內容,但保留手動創建的文件。

-n

--dry運行

實際上不要刪除任何東西,只顯示將要做的事情。

-d

除了未跟踪的文件之外,刪除未跟踪的目錄。 如果未跟踪的目錄由不同的Git存儲庫管理,則默認情況下不會刪除它。 如果您確實要刪除此類目錄,請使用-f選項兩次。


用於從git docs中刪除未跟踪文件的 uggested命令是git clean

git clean - 從工作樹中刪除未跟踪的文件

建議的方法:使用git clean -i交互模式,這樣我們就可以控制它了。 讓我們看看剩餘的可用選項

可用選項:

git clean 
    -d -f -i -n -q -e -x -X (can use either)

說明:

1. -d

除了未跟踪的文件之外,刪除未跟踪的目錄。 如果未跟踪的目錄由不同的Git存儲庫管理,則默認情況下不會刪除它。 如果您確實要刪除此類目錄,請使用-f選項兩次。

2. -f, - force

如果Git配置變量clean.requireForce未設置為false,則除非給定-f,-n或-i,否則git clean將拒絕運行。

3.-i, - 相互作用

顯示將要執行的操作並以交互方式清理文件。 有關詳細信息,請參見“交互模式”

4. -n, - 幹跑

實際上不要刪除任何東西,只顯示將要做的事情。

5. -q, - quiet

保持安靜,僅報告錯誤,但不報告成功刪除的文件。

6. -e, - exclude =

除了在.gitignore(每個目錄)和$ GIT_DIR / info / exclude中找到的那些之外,還要考慮這些模式在有效的忽略規則集中。

7. -x

不要使用從.gitignore(每個目錄)和$ GIT_DIR / info / exclude讀取的標準忽略規則,但仍然使用-e選項給出的忽略規則。 這允許刪除所有未跟踪的文件,包括構建產品。 這可以使用(可能與git reset一起使用)來創建一個pristine工作目錄來測試一個乾淨的構建。

8. -X

僅刪除Git忽略的文件。 這可能有助於從頭開始重建所有內容,但保留手動創建的文件。


zsh的 oh-my-zsh通過git插件提供了那些很棒的別名。 它們也可以用於bash。

gclean='git clean -fd'
gpristine='git reset --hard && git clean -dfx'

  • 除了未跟踪的文件外, gclean 刪除未跟踪的目錄
  • gpristine硬重置本地更改,刪除未跟踪的目錄,未跟踪的文件, 不要使用從.gitignore(每個目錄)和$ GIT_DIR / info / exclude讀取的標準忽略規則,但仍然使用-e選項給出的忽略規則。 這允許刪除所有未跟踪的文件,包括構建產品。 這可以使用(可能與git reset一起使用)來創建一個pristine工作目錄來測試一個乾淨的構建

要知道在實際刪除之前將刪除的內容:

git clean -d -n

它將輸出如下內容:

將刪除sample.txt

要刪除上一個命令的輸出中列出的所有內容:

git clean -d -f

它將輸出如下內容:

刪除sample.txt


這就是我經常使用的:

git clean -fdx

對於一個非常大的項目,您可能希望運行它幾次。





git-branch