簡體   English   中英

Git:從分支中刪除不需要的未跟蹤文件

[英]Git: remove unwanted untracked files from branch

我從master更新了我的分支,並且有一些在master上刪除的文件,但仍保留在我的本地並顯示為未跟蹤的文件。 我想刪除這些文件 - 即確認我不再希望它們在我的本地。

我已經嘗試了git rm <file>但這沒有任何作用 - 當我運行git status時沒有消息也沒有變化。

我已經嘗試從master( git checkout -- <file>git checkout -- <file>但當然我收到一條消息,說主文件上不存在該文件。

我試過運行git clean -n但是我收到很多消息說Would not remove <file>

我也嘗試刪除分支git branch -D <branch-name>並引入一個新版本,但仍然得到相同的合並沖突。

有誰知道我能做什么?

TL; DR

這個問題似乎沒有意義。 未經跟蹤的文件已經存在,因此無需刪除。 更確切地說, 未跟蹤文件是工作樹中的文件,但不在索引中。 因此,Git只是讓它坐在那里,除了兩件事之外, 大多數都忽略了它:

  • 例如,Git在git status輸出中一直抱怨它未被跟蹤。
  • 使用任何意味着“添加所有內容”的選項運行git add ,例如git add . ,將它添加索引,以便現在跟蹤它。

為了阻止這兩種令人煩惱的情況,人們列出.gitignore文件中特定的未跟蹤文件名或名稱模式。 注意.gitignore不會導致文件變得未跟蹤; 它只是關閉了Git關於工作樹的文件,並確保“添加所有”跳過該文件。

未跟蹤文件是不在索引中的文件。 索引是它自己獨立的東西:它不是一個分支,它不是一個工作樹。 相反,它是您通過暫存更新的文件來構建您打算進行的下一次提交的地方。 這就是為什么它有時被稱為臨時區域 它還具有索引和緩存工作樹的效果,因此它的名稱索引和第三個名稱, 緩存

請注意,索引是一種現實的東西:它的內容隨着時間的推移而變化,特別是在您檢查特定提交時,或者去創建新的提交。 但是,在任何情況下,索引都不是分支的一部分,因此“從分支中刪除未跟蹤的文件”沒有立即意義。 但是,我們也必須去拖住所說的“分支”在這里的意思:看我們究竟由“分支”是什么意思?

請注意, 分支名稱指向一個特定的提交。 如果運行git checkout name ,則表示您正在檢查name指向的特定提交。 簽出提交的行為填寫了索引,所以現在索引包含一些文件集, 現在我們可以討論某個文件是否在索引中,因此是否未跟蹤。 未經跟蹤的詞出現往往比跟蹤 ,但它似乎很清楚,一個跟蹤文件是一個在索引中。)

如果在git checkout name后跟蹤了一些路徑P ,則運行git rm P后跟git commit將進行新的提交,並更改name以便識別此新提交。 這個新的提交將是一個,當簽出時,將P 索引中刪除,必要時將其從索引中刪除。 所以現在name標識了一個路徑為P未跟蹤的提交。 如果你的意思是上面的“分支”,那么這就是你的答案。

另一方面,如果你的意思是“分支”這個詞包含所有可以從名稱中獲得提交 ,或者沿着這些行提供的東西,那么你就會遇到更棘手的問題。 您根本無法更改任何現有提交。 您可以進行一系列新提交,您認為它們比原始文件“更好”:例如,您可以進行一系列新提交,其中沒有一個具有路徑P ,然后停止使用所有舊提交和開始只使用這些新提交。 這就是許多調用重寫歷史記錄的內容:更改由某些分支名稱標識的提交集,以便這些新的和改進的提交與所有原始提交不同。 這種歷史重寫的缺點是你必須讓所有這些存儲庫的克隆用戶將他們的所有用法切換到新的提交; 否則舊的承諾會繼續回來,就像某種可怕疾病的壞情況一樣。

我已經嘗試過運行git clean -n但是我收到很多消息說不會刪除。

-n表示dry-run ,即實際上不刪除任何東西,只顯示將要執行的操作。 ,這條消息只是告訴你這個事實。

如果要刪除未跟蹤的文件,則應使用命令git clean -dxf

git clean manpage的quatation

-d

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

-f, - force

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

-X

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM