我该如何从当前的工作树中删除未被跟踪的本地文件?
gclean='git clean -fd'
gpristine='git reset --hard && git clean -dfx'
gclean
除了删除未跟踪的文件,还会删除未跟踪的目录。gpristine
硬重置本地更改,删除未跟踪的目录、未跟踪的文件,并且不使用从 .gitignore (每个目录) 和 $GIT_DIR/info/exclude 读取的标准忽略规则,但仍然使用带有 -e 选项给出的忽略规则。这允许删除所有未跟踪的文件,包括构建产品。这可以用于(可能与 git reset 结合使用)创建一个原始的工作目录以测试干净的构建。bash
中显然非常有效。我编辑了我的答案以反映这一点。 - Jämesgit clean -f
git clean -fd
我认为这是一种安全且简单的方法!
git add .
git stash
了解更多信息请访问https://www.atlassian.com/git/tutorials/saving-changes/git-stash#stashing-your-work
我喜欢使用 git stash
命令,稍后可以获取存储的文件和更改。 git clean
也是一个不错的选择,但完全取决于您的需求。以下是 git stash 和 git clean 的解释,7.3 Git 工具 - 存储和清理
注意:首先导航到目录并检出您要清理的分支。
-i
交互模式,它会告诉您将被删除的内容,并且您可以从列表中选择一个操作。
仅清理文件 [不会列出和清理文件夹]:
$ git clean -i
清理文件和文件夹:
$ git clean -d -i
-d
包括目录。
如果您从列表中选择 c 。将删除未跟踪的文件/文件夹,并删除您弄乱的文件/文件夹*。
例如:如果您重新组织远程文件夹并将更改拉取到本地计算机,则最初由其他人创建的文件/文件夹将位于过去的文件夹中,并且在您重新构造的新文件夹中。
git add -A && git commit -m temp && git reset --hard HEAD^
这将首先暂存所有更改,然后创建一个临时提交,最后将其丢弃。使用方法:git clean [-d] [-f] [-i] [-n] [-q] [-e ] [-x | -X] [--] ...
该命令用于从工作目录中删除未跟踪的文件。您可以使用不同的选项来控制要删除的文件类型以及是否要交互式地进行操作。
-q, --quiet do not print names of files removed
-n, --dry-run dry run
-f, --force force
-i, --interactive interactive cleaning
-d remove whole directories
-e, --exclude <pattern>
add <pattern> to ignore rules
-x remove ignored files, too
-X remove only ignored files
使用 git reset HEAD <file>
命令来取消暂存文件
这可以通过使用shell脚本来完成,我使用这个列出将要被删除的内容的脚本,然后让我确认操作。
这很有用,因为有时我想在清除所有内容之前检查补丁或其他文件。
#!/bin/bash
readarray -t -d '' FILES < <(git ls-files -z --other --directory)
if [ "$FILES" = "" ]; then
echo "Nothing to clean!"
exit 0
fi
echo -e "Dirty files:\n"
printf ' %s\n' "${FILES[@]}"
DO_REMOVE=0
while true; do
echo ""
read -p "Remove ${#FILES[@]} files? [y/n]: " choice
case "$choice" in
y|Y )
DO_REMOVE=1
break ;;
n|N )
echo "Exiting!"
break ;;
* ) echo "Invalid input, expected [Y/y/N/n]"
continue ;;
esac
done
if [ "$DO_REMOVE" -eq 1 ];then
echo "Removing!"
for f in "${FILES[@]}"; do
rm -rfv -- "$f"
done
fi
git clean
现在有一个交互模式!请参见我对另一个问题的答案:git 1.8.4+ - VonCgit status
命令,如果它显示有一个文件未被跟踪,并且你不想将该文件添加到版本库中,你可以直接在文件系统中删除或移动它。这样不会对你的本地仓库或 Git 造成任何损害。你也可以使用git clean
或以下答案中的某些变体,包括交互式版本,以仅删除选择的文件,但交互模式可能很繁琐。无论你做什么,一定要确保你理解git clean
将删除哪些内容,或使用--dry-run
让它告诉你而不会真正执行删除操作。 - LightCCrm files-to-be-deleted
。 - mhatch