我正在分支,说“实验”分支,我从我的主分支分支出来。然后,我在实验分支中生成一个用户模型,但是还没有将它们添加到索引中。
如果我要放弃最近在实验分支中添加的文件的所有更改,我该怎么办?未跟踪的文件如下所示:
$ git status
On branch new_chick
Untracked files:
(use "git add <file>..." to include in what will be committed)
.project
app/models/user.rb
db/migrate/
test/fixtures/users.yml
test/unit/user_test.rb
我试图运行“git reset --hard”以希望撤消所有这些更改,但上面的所有文件仍然显示。
有人请对我说清楚吗?
答案 0 :(得分:205)
要删除未跟踪的文件/目录,请执行以下操作:
git clean -fdx
-f - 强制
-d - 目录
-x - 也删除被忽略的文件(如果你不想删除被忽略的文件,请不要使用它)
答案 1 :(得分:16)
用户互动方式:
git clean -i -fd
Remove .classpath [y/N]? N
Remove .gitignore [y/N]? N
Remove .project [y/N]? N
Remove .settings/ [y/N]? N
Remove src/com/amazon/arsdumpgenerator/inspector/ [y/N]? y
Remove src/com/amazon/arsdumpgenerator/manifest/ [y/N]? y
Remove src/com/amazon/arsdumpgenerator/s3/ [y/N]? y
Remove tst/com/amazon/arsdumpgenerator/manifest/ [y/N]? y
Remove tst/com/amazon/arsdumpgenerator/s3/ [y/N]? y
-i用于交互式
-f for force
-d表示目录
-x表示忽略的文件(如果需要,可添加)
注意: 添加 -n 或 - 干运行以查看它将执行的操作。
答案 2 :(得分:15)
这些是未跟踪的文件。这意味着git没有跟踪它们。它只列出它们,因为它们不在git ignore文件中。由于它们没有被git跟踪,git reset
不会触及它们。
如果你想要删除所有未跟踪的文件,最简单的方法是git clean -f
(如果你想看看它会破坏什么而不实际删除任何内容,请使用git clean -n
)。否则,您只需手动删除不需要的文件。
答案 3 :(得分:1)
救援指令是git clean
。
答案 4 :(得分:0)
删除未跟踪的文件:
git clean -f
要删除未跟踪的目录,请使用:
git clean -f -d
为防止任何心脏骤停,请使用
git clean -n -f -d
答案 5 :(得分:0)
好吧,我有类似的问题。我采取了最新的,但在本地有一些变化,因为合并没有发生在特定的文件。文件没有跟踪,我不想要它们 我做的是 -
$ git checkout filepath / filename
filepath - 我做git bash的位置。 然后,当我采取最新的改变是可用的
答案 6 :(得分:0)
您也可以用另一种方式返回本地仓库的先前状态:
git add
将未跟踪的文件添加到暂存区域。 git reset --hard
返回本地仓库的上一个状态。答案 7 :(得分:0)
虽然git clean
运作良好,但我仍然发现使用自己的脚本清理git repo很有用,
这将显示要清除的文件列表,然后以交互方式提示是否清除。这几乎一直是我想要的,因为每个文件的交互式提示变得乏味。
它还允许手动过滤列表,当您不想清除文件类型(并且有理由不提交)时,该列表会派上用场。
git_clean.sh
#!/bin/bash
readarray -t -d '' FILES < <(
git ls-files -z --other --directory |
grep --null-data --null -v '.bin$\|Cargo.lock$'
)
if [ "$FILES" = "" ]; then
echo "Nothing to clean!"
exit 0
fi
echo "Dirty files:"
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