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

How to remove local (untracked) files from the current Git working tree
投票:6504回答:35

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

tags:git,branch,git-branch
35回答
229
投票

如果未跟踪的目錄是它自己的git存儲庫(例如,子模塊),則需要使用-f兩次:

git clean -d -f -f


77
投票

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

git clean -f {dir_path}

以及刪除未跟踪目錄/文件和忽略文件的組合方式。

git clean -fxd {dir_path}

之後,您將只能以git status修改文件。


109
投票

這就是我一直使用的:

git clean -fdx

對於一個非常大的項目,您可能需要運行幾次。


451
投票

令我驚訝的是,之前沒有人提到:

git clean -i

這表示交互式 ,您將快速了解要刪除的內容,從而可以包含/排除受影響的文件。 總體而言,仍比真正清潔之前運行強制性--dry-run更快。

如果您還想處理空文件夾,則必須輸入-d 最後,它提供了一個很好的別名:

git iclean

話雖如此,交互命令的額外手握可能會使有經驗的用戶感到厭煩。 這些天我只用已經提到過的git clean -fd


129
投票

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

編輯:我也找到了一種方法來顯示隱藏的未跟踪文件(例如git show stash@{0}^3https://stackoverflow.com/a/12681856/338986

EDIT2:不推薦使用git stash save而推薦使用push 謝謝@ script-wolf。


50
投票

git clean -fd刪除目錄

git clean -fX刪除忽略的文件

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

可以結合使用以上所有選項

git clean -fdXx

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


33
投票

更好的方法是使用:git clean

git clean -d -x -f

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

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


16
投票

git clean -f -d -x $(git rev-parse --show-cdup)將clean應用於根目錄,無論您在存儲庫目錄樹中的何處調用它。 我一直在使用它,因為它不會強迫您離開您現在使用的文件夾,並且可以從您所在的位置直接進行清理和提交。

確保標誌-f-d-x滿足您的需求:

-d
       Remove untracked directories in addition to untracked files. If an
       untracked directory is managed by a different Git repository, it is
       not removed by default. Use -f option twice if you really want to
       remove such a directory.

-f, --force
       If the Git configuration variable clean.requireForce is not set to
       false, git clean will refuse to delete files or directories unless
       given -f, -n or -i. Git will refuse to delete directories with .git
       sub directory or file unless a second -f is given. This affects
       also git submodules where the storage area of the removed submodule
       under .git/modules/ is not removed until -f is given twice.

-x
       Don't use the standard ignore rules read from .gitignore (per
       directory) and $GIT_DIR/info/exclude, but do still use the ignore
       rules given with -e options. This allows removing all untracked
       files, including build products. This can be used (possibly in
       conjunction with git reset) to create a pristine working directory
       to test a clean build.

還有其他可用的標誌,只需檢查git clean --help


10
投票

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

git clean -d -n

它將輸出類似:

將刪除sample.txt

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

git clean -d -f

它將輸出類似:

刪除sample.txt


14
投票

我剛剛發明並嘗試過的一種針對這種情況的救生衣(非常有效):

git add .
git reset --hard HEAD

謹防! 在執行此操作之前,請確保提交所有必要的更改 (即使在未跟踪的文件中)。


13
投票

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

git stash save -u
git stash drop "stash@{0}"

我更喜歡使用“ git clean”,因為“ git clean”將刪除git忽略的文件,因此您的下一個構建將必須重新構建所有內容,並且您可能也會丟失IDE設置。


211
投票

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

要刪除所有未跟踪的文件,最簡單的方法是先添加所有未跟踪文件,然後按如下所示重置存儲庫

git add --all
git reset --hard HEAD


16
投票

對我來說,只有以下工作:

git clean -ffdx

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


5
投票

普通git clean命令不會刪除未跟踪文件與我的git version 2.9.0.windows.1

$ git clean -fdx     # doesn't remove untracked files
$ git clean -fdx *   # Append star then it works!

8
投票

要刪除未跟踪的文件,您應該首先使用命令查看將受到清理影響的文件

git clean -fdn

這將向您顯示將被刪除的文件列表。 現在,要實際刪除這些文件,請使用以下命令:

git clean -fd

1
投票

注意:首先導航到目錄,然後簽出要清除的分支。

-i交互模式,它將告訴您將要刪除的內容,您可以從列表中選擇一個操作。

  1. 僅清理文件 [文件夾將不會列出,也不會被清理]: $ git clean -i

  2. 清理文件和文件夾$ git clean -d -i

-d包括目錄。


如果從列表中選擇c 將刪除未跟踪的文件/文件夾,還將刪除您弄亂的文件/文件夾。*

例如:如果您重組遠程文件夾,並將所做的更改拉到本地計算機。 最初由其他人創建的文件/文件夾將位於過去的文件夾中,並且位於您要重組的新文件夾中。


44
投票

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

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

git clean -ffdx

刪除此存儲庫中的所有其他文件夾和文件,但不刪除其子模塊

git clean -fdx

僅刪除多餘的文件夾,而不刪除文件(例如,構建文件夾)

git clean -fd

刪除多餘的文件夾+被忽略的文件(但不刪除任何新添加的文件)

如果文件未被忽略且尚未簽入,則它將保留。 請注意大寫X。

git clean -fdX

新的互動模式

git clean

6
投票

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

我已經在我的博客git-intro-basic-commands中介紹了一些基礎知識


22
投票

用戶互動方式:

git clean -i -fd

Remove .classpath [y/N]? N
Remove .gitignore [y/N]? N
Remove .project [y/N]? N
Remove .settings/ [y/N]? N
Remove src/com/arsdumpgenerator/inspector/ [y/N]? y
Remove src/com/arsdumpgenerator/manifest/ [y/N]? y
Remove src/com/arsdumpgenerator/s3/ [y/N]? y
Remove tst/com/arsdumpgenerator/manifest/ [y/N]? y
Remove tst/com/arsdumpgenerator/s3/ [y/N]? y

-i進行交互
-f表示力
-d用於目錄
-x用於忽略的文件(如果需要,添加)

注意: 添加-n--dry-run僅檢查其作用。


39
投票

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

git clean -fd

在執行此操作之前, 請仔細檢查 ,因為它會刪除文件和文件夾而不會產生任何歷史記錄...

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

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

git clean -f

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

git clean -fd

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

並添加-i標誌,使git要求您允許隨時刪除文件。

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

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

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


刪除不需要的未跟踪文件和文件夾


6
投票

從git docs刪除未跟踪文件的建議命令是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,--interactive

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

4. -n,--dry-run

實際上不刪除任何內容,只是顯示將要執行的操作。

5. -q,--quiet

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

6. -e,--exclude =

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

7. -x

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

8. -X

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


3
投票

遞歸清理git倉庫和所有子模塊

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

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

7
投票

運行`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的 stash隨時檢索文件。 然後,您可以在以後使用以下方法清除存儲:

git stash drop // or clean

3
投票

帶有zsh的 oh-my-zsh通過git插件提供了那些出色的別名。 它們也可以用於bash中。

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

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

5
投票

我們可以使用下面的git註釋輕鬆地從當前git工作樹中刪除本地未跟踪的文件。

git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit>]

例:

git reset --hard HEAD

友情鏈接:

  1. https://git-scm.com/docs/git-reset
  2. 如何使用'git reset --hard HEAD'恢復到先前的提交?
  3. 將本地存儲庫分支重置為類似於遠程存儲庫HEAD
  4. https://jwiegley.github.io/git-from-the-bottom-up/3-Reset/4-doing-a-hard-reset.html

2
投票
git clean -f

將從當前git中刪除未跟踪的文件

git clean -fd

當您要刪除目錄和文件時,這只會刪除未跟踪的目錄和文件


2
投票

我喜歡使用git stash命令,以後可以獲取隱藏文件和更改。 git clean也是一個不錯的選擇,但完全取決於您的要求。 這是git stash和git clean的說明, 7.3 Git工具-隱藏和清潔


85
投票

git-clean是您想要的。 它用於從工作樹中刪除未跟踪的文件。



8391
投票

根據Git文檔git clean

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


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

# Print out the list of files which will be removed (dry run)
git clean -n

清潔步驟- 當心:這將刪除文件

# Delete the files from the repository
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--force

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

-x

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

-X

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

-n ,-- --dry-run

實際上不刪除任何內容,只是顯示將要執行的操作。

-d

除未跟踪的文件外,還刪除未跟踪的目錄。 如果未跟踪的目錄由其他Git存儲庫管理,則默認情況下不會將其刪除。 如果您確實要刪除這樣的目錄,請使用-f選項兩次。


923
投票

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

-n, -dry-run

實際上不刪除任何內容,只是顯示將要執行的操作。

-d

除未跟踪的文件外,還刪除未跟踪的目錄。 如果未跟踪的目錄由其他Git存儲庫管理,則默認情況下不會將其刪除。 如果您確實要刪除這樣的目錄,請使用-f選項兩次。

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


©2020 sofbug.com - All rights reserved.