我删除了一些文件,git status 显示如下。
我已经承诺并推动了。
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 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:
并打印剩下的内容; xargs
收集参数并将它们提供给 git rm
命令。这适用于任意数量的文件,无论名称是否相似。
git diff --diff-filter=D --name-only -z | xargs -0 git rm
是一种比尝试解析面向用户的 git status
更可靠的方法,并且不能保证在未来版本中保持稳定。
git diff
可用选项的知识(我没有,以前没有需要)。谢谢!
git ls-files --deleted | xargs git rm
为我解决了问题。
ByScripts 答案的另一个版本是
git rm $(git ls-files --deleted)
这只会从 git 中删除已删除的文件。
它也可用于仅添加已修改的文件。
git add $(git ls-files --modified)
这些命令也适用于 Windows 的 gitbash。
git ls-files
非常有用。
'git add --update (or -u)'
的行为将在 Git 2.0 中发生变化,不应再使用。要为整个树添加内容,请运行:git add --update :/
(或 git add -u :/)要将命令限制在当前目录,请运行:git add --update .
(或 git add -u。)使用当前 Git 版本,该命令仅限于当前目录
src/my spaced directory/myfile
。这可以单独处理,但如何使用这个答案中的命令来处理?
更新您所做的所有更改:
git add -u
删除的文件应从未暂存(通常为红色)变为暂存(绿色)。然后提交以删除已删除的文件:
git commit -m "note"
如果您不关心暂存修改过的文件,最好的解决方案是使用 mshameers 和/或 pb2q 所说的 git add -u
。
如果您只想删除已删除的文件,而不是暂存任何修改过的文件,我认为您应该使用带有 --deleted
选项的 ls-files
参数(无需使用正则表达式或其他复杂的参数/选项):
git ls-files --deleted | xargs git rm
git add -A
解决了这个问题...以防万一将来有人想知道。check the below answer
是的,git rm <filename>
将暂存文件的已删除状态,其中 <filename>
可以是全局模式:
$ 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 -u
暂存所有更改,包括所有已删除的文件,然后提交。
git add -u
正是我们正在寻找的 - 如果您进行多次删除,然后想要提交所有删除,这似乎是最简单和最“标准”的方式(意思是,没有特定于案例的 glob 或复杂的shell 解析成 xargs)。除了它一次添加所有更改之外,我们是否有不想使用它的原因?
当我删除了很多未暂存以进行提交的文件时,您可以在一个节目中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 clean -fd
git add -u .
git add --update .
在我删除它们并遇到这个简洁的命令后,我的仓库中出现了这个幽灵文件问题!
git add -A
它与 git add -a
和 git add -u
的组合基本相同,但区分大小写。我从 this awesome link 获得的(此链接现在指向 archive.org 上的版本,因为截至 2016 年 6 月,原版已转换为垃圾邮件/网络钓鱼页面)
如果您想使用“git rm”删除所有这些。这就是我所做的:
git ls-files --deleted -z | xargs -0 git rm
此查询列出了所有已删除的文件并将它们从您的 git 存储库中删除。希望能帮助到你。
以下是如何检测已删除文件并将其删除作为下一次提交的一部分。该线程上的所有解决方案都有不同的优点。下面的这个解决方案专门处理文件名中带有空格的问题。
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 "/path to a folder/path to a file" 的内容,仅当路径名中有空格时才会发生
awk '/^.D .*$/ {print $0}'
仅匹配以“ D ”开头的行
sed 's/ D \(.*\)/\1/'
从每个字符串的前面删除“ D ”
tr -d '"'
删除引号,如果有的话
xargs -I {} git rm '{}'
将文件名变量定义为 {} 在 git rm 下运行文件名,用单引号括起来,以确保它支持带空格的文件名。
不定期副业成功案例分享