簡體   English   中英

如何刪除Git存儲庫中的多個已刪除文件

[英]How to remove multiple deleted files in Git repository

我刪除了一些文件和git狀態顯示如下。

我承諾並推動。

GitHub仍然在存儲庫中顯示已刪除的文件。 如何刪除GitHub存儲庫中的文件?

# On branch master
# Changes not staged for commit:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   deleted:    modules/welcome/language/english/kaimonokago_lang.php
#   deleted:    modules/welcome/language/french/kaimonokago_lang.php
#   deleted:    modules/welcome/language/german/kaimonokago_lang.php
#   deleted:    modules/welcome/language/norwegian/kaimonokago_lang.php

如果我使用git rm ,它會給出以下內容。

usage: git rm [options] [--] <file>...

-n, --dry-run         dry run
-q, --quiet           do not list removed files
--cached              only remove from the index
-f, --force           override the up-to-date check
-r                    allow recursive removal
--ignore-unmatch      exit with a zero status even if nothing matched
git add -u 

更新所有更改

git rm .非常謹慎git rm . ; 它可能刪除超過你想要的。 當然,你可以恢復,但不必這樣做更簡單。

最簡單的是:

git rm modules/welcome/language/english/kaimonokago_lang.php \
       modules/welcome/language/french/kaimonokago_lang.php \
       modules/welcome/language/german/kaimonokago_lang.php \
       modules/welcome/language/norwegian/kaimonokago_lang.php

您不能使用shell通配符,因為文件不存在,但您可以使用(至少在Bash中):

git rm modules/welcome/language/{english,french,german,norwegian}/kaimonokago_lang.php

或者考慮:

git status | sed -n '/^# *deleted:/s///p' | xargs git rm

這取得了git status的輸出,默認情況下不會打印任何內容( sed -n ),但是在啟動# deleted: ,它會deleted: #deleted:並打印剩下的內容; xargs收集參數並將它們提供給git rm命令。 無論名稱中的相似性(或不相似性)如何,這都適用於任意數量的文件。

ByScripts答案的另一個版本是

git rm $(git ls-files --deleted)

這只會從git中刪除已刪除的文件。

它也可以用於添加僅修改過的文件。

git add $(git ls-files --modified)

這些命令也適用於Windows的gitbash。

更新您所做的所有更改:

git add -u

刪除的文件應從未分階段(通常為紅色)更改為分階段(綠色)。 然后提交刪除已刪除的文件:

git commit -m "note"

如果你不關心升級文件的最佳解決方案是使用mshameers和/或pb2q所說的git add -u

如果你只想刪除已刪除的文件,但不要刪除任何已修改的文件,我認為你應該使用帶有--deleted選項的ls-files參數(不需要使用正則表達式或其他復雜的args /選項):

git ls-files --deleted | xargs git rm

是的, git rm <filename>git rm <filename>的已刪除狀態,其中<filename>可以是glob模式:

$ git rm modules/welcome/language/*/kaimonokago_lang.php
rm modules/welcome/language/english/kaimonokago_lang.php
rm modules/welcome/language/french/kaimonokago_lang.php
rm modules/welcome/language/german/kaimonokago_lang.php
rm modules/welcome/language/norwegian/kaimonokago_lang.php

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       deleted:    modules/welcome/language/english/kaimonokago_lang.php
#       ...

然后,你可以提交。

如果你願意, git commit -a可以一次完成。

您還可以使用git add -ugit add -u所有更改,包括所有已刪除的文件,然后提交。

當我有很多文件,我已經刪除了這是不分階段的承諾,你可以git rm他們都在一個放映:

for i in `git status | grep deleted | awk '{print $3}'`; do git rm $i; done

正如問題回答者提到的那樣,小心git rm

試試這個:

 git rm `git ls-files -d`

您可以使用

git commit -m "remove files" -a
git push

手動刪除文件后。

您可以創建一個shell腳本,該腳本將在運行時刪除所有文件:

git status | grep deleted | awk '{print "git rm " $3;}' > ../remove.sh

創建的腳本是remove.sh ,它包含git rm命令的完整列表。

git status | sed 's/^#\s*deleted:\s*//' | sed 's/^#.*//' | xargs git rm -rf

如果要使用“git rm”刪除所有這些內容。 這就是我做的:

git ls-files --deleted -z | xargs -0 git rm

此查詢列出了已刪除的所有文件,並從git存儲庫中刪除它們。 希望能幫助到你。

git add -u .

git add --update .

內置的清潔功能也很有用......

git clean -fd

在我刪除它們之后,我發現這個鬼文件出現在我的倉庫中並遇到了這個整潔的命令!

git add -A

它與git add -agit add -u基本相同,但它區分大小寫。 我從這個很棒的鏈接獲得它(此鏈接指向archive.org上的版本,因為原始版本已轉換為垃圾郵件/網上誘騙頁面,截至2016年6月)

以下是如何檢測已刪除的文件並將其刪除作為下一次提交的一部分。 該主題上的所有解決方案都有不同的優點。 下面的解決方案專門處理文件名中帶有空格的問題。

git status --porcelain | awk '/^.D .*$/ {print $0}' | sed 's/.D \(.*\)/\1/' | tr -d '"' | xargs -I {} git rm '{}'

確保在使用git的--dry-run選項測試之前使用以下命令運行它:

git status --porcelain | awk '/^.D .*$/ {print $0}' | sed 's/.D \(.*\)/\1/' | tr -d '"' | xargs -I {} git rm --dry-run '{}'

說明:

git status --porcelain

這會打印出類似D“/文件夾/路徑到路徑的路徑”,只有在路徑名中有空格時才會發生

awk '/^.D .*$/ {print $0}'

僅匹配以“D”開頭的行

sed 's/ D \(.*\)/\1/'

從每個字符串的前面刪除“D”

tr -d '"'

刪除引號,如果有的話

xargs -I {} git rm '{}'

將文件名變量定義為{}在單引號括起的git rm下運行文件名,以確保它支持帶空格的文件名。

暫無
暫無

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

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