How to remove multiple deleted files in Git repository
我删除了一些文件,git状态显示如下。
我已经承诺和推动了。
Github仍然显示存储库中已删除的文件。如何删除Github存储库中的文件?
1 2 3 4 5 6 7 8 9 | # 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 |
如果我使用
1 2 3 4 5 6 7 8 | 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 |
号
1 | git add -u |
。
更新所有更改
对
最简单的方法是:
1 2 3 4 | 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中):
1 | git rm modules/welcome/language/{english,french,german,norwegian}/kaimonokago_lang.php |
或者考虑:
1 | git status | sed -n '/^# *deleted:/s///p' | xargs git rm |
。
它接受
另一个版本的byscripts答案是
1 | git rm $(git ls-files --deleted) |
这只会从git中删除已删除的文件。
它也可以用于只添加修改过的文件。
1 | git add $(git ls-files --modified) |
。
这些命令也适用于Gitbash for Windows。
更新您所做的所有更改:
1 | git add -u |
号
删除的文件应从未分页(通常为红色)更改为分级(绿色)。然后提交以删除已删除的文件:
1 | git commit -m"note" |
号
如果您不关心分段修改的文件,最好的解决方案是使用
如果您只想删除已删除的文件,而不准备任何已修改的文件,我认为您应该将
1 | git ls-files --deleted | xargs git rm |
是的,
1 2 3 4 5 6 7 8 9 10 11 12 13 | $ 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 # ... |
然后,您可以提交。
如果你愿意的话,
您还可以使用
当我删除了许多未归档的文件供提交时,您可以在一个显示中使用以下命令来删除这些文件:
1 | for i in `git status | grep deleted | awk '{print $3}'`; do git rm $i; done |
正如问题回答者提到的,小心
试试这个:
1 | git rm `git ls-files -d` |
您可以创建一个shell脚本,该脚本在运行时将删除所有文件:
1 | git status | grep deleted | awk '{print"git rm" $3;}' > ../remove.sh |
号
创建的脚本是
你可以用
1 2 | git commit -m"remove files" -a git push |
号
手动删除文件后。
1 2 3 | git add -u . git add --update . |
号
如果您想使用"git rm"删除所有文件。我就是这样做的:
1 | git ls-files --deleted -z | xargs -0 git rm |
号
此查询列出所有已删除的文件,并将它们从Git存储库中删除。希望有帮助。
1 | git status | sed 's/^#\s*deleted:\s*//' | sed 's/^#.*//' | xargs git rm -rf |
。
我删除了这些鬼文件后,在我的报告中出现了这个问题,并且遇到了这个整洁的命令!
埃多克斯1〔17〕
基本上与
内置的清洗功能也有助于…
1 | git clean -fd |
。
以下是如何检测已删除的文件并将其删除作为下一次提交的一部分进行阶段。这个线程上的所有解决方案都有不同的优点。下面这个解决方案专门处理文件名中包含空格的问题。
1 | git status --porcelain | awk '/^.D .*$/ {print $0}' | sed 's/.D \(.*\)/\1/' | tr -d '"' | xargs -I {} git rm '{}' |
号
在使用以下方法运行之前,请确保使用git的--dry-run选项对此进行测试:
1 | git status --porcelain | awk '/^.D .*$/ {print $0}' | sed 's/.D \(.*\)/\1/' | tr -d '"' | xargs -I {} git rm --dry-run '{}' |
号
说明:
1 | git status --porcelain |
号
这个打印出d"/文件夹路径/文件路径"只有当路径名中有空格时才会发生这种情况
1 | awk '/^.D .*$/ {print $0}' |
号
仅匹配以"d"开头的行
1 | sed 's/ D \(.*\)/\1/' |
从每根绳子的前面取下"D"
1 | tr -d '"' |
。
删除引号(如果有)
1 | xargs -I {} git rm '{}' |
号
将文件名变量定义为在用单引号括起来的git rm下运行文件名,以确保它支持带空格的文件名。