我把以前由 Git 跟踪的文件放在.gitignore 列表中. 但是,文件在编辑后仍然显示在 git 状态。
当前回答
答案来自Matt Frear是最有效的IMHO. 下面只是一个PowerShell脚本给那些在Windows只删除文件从他们的Git存储库,符合他们的排除列表。
# Get files matching exclusionsfrom .gitignore
# Excluding comments and empty lines
$ignoreFiles = gc .gitignore | ?{$_ -notmatch "#"} | ?{$_ -match "\S"} | % {
$ignore = "*" + $_ + "*"
(gci -r -i $ignore).FullName
}
$ignoreFiles = $ignoreFiles| ?{$_ -match "\S"}
# Remove each of these file from Git
$ignoreFiles | % { git rm $_}
git add .
其他回答
例如,在使用 CVS 时,这个问题不存在, CVS 将信息存储为基于文件的变更列表。
这两篇文章对我很有帮助:
git assume-unchanged vs skip-worktree 以及如何用 Git 忽略跟踪文件的变化
git update-index --skip-worktree <file>
从此,此文件中的所有本地变更将被忽视,不会去远程。如果文件在远程中被更改,冲突将发生,当 git pull. Stash 不会工作。
git update-index --no-skip-worktree <file>
git stash
git pull
文件内容将被远程内容取代. 将您的更改从安全地点调整到文件,然后再次执行:
git update-index --skip-worktree <file>
把它移动出来,承诺,然后把它移动回来。
这对我来说在过去已经工作了,但可能有更“迷人的”方式来实现这一点。
移动或复制文件到一个安全的位置,所以你不会失去它。
文件仍然会出现,如果你转到以前的任务之一,或另一个分支,它没有被删除. 但是,在所有未来的任务,你不会再看到文件. 如果文件在 Git 忽略,那么你可以将其返回文件夹, Git 不会看到它。
我用 git filter-branch 完成了这一点,我所使用的准确命令从 man 页面上取出:
警告:此将从您的整个历史中删除文件
git filter-branch --index-filter 'git rm --cached --ignore-unmatch filename' HEAD
这个命令将恢复整个命令历史,在每个命令之前执行 git rm 以便摆脱所指定的文件. 不要忘记在运行命令之前备份它,因为它将失去。
为文件 / 文件夹执行下列步骤:
删除文件:
需要添加该文件到.gitignore. 需要删除该文件使用命令(git rm --cached 文件名)。 需要运行(git add.). 需要(commit -m)“文件删除”。 最后,(git push)。
例如:
我想删除 test.txt 文件. 我偶然推到 GitHub 并想删除它. 命令将如下:
首先,在.gitignore 文件中添加“test.txt”
git rm --cached test.txt
git add .
git commit -m "test.txt removed"
git push
删除文件夹:
需要添加该文件夹到.gitignore 文件夹. 需要删除该文件夹使用命令(git rm -r --cached 文件夹名称)。 需要运行(git add.). 需要(commit -m)“文件夹删除”。 最后,(git push)。
例如:
我想删除.idea 文件夹/目录. 我偶然推到 GitHub 并想删除它。
首先,在.gitignore 文件中添加.idea
git rm -r --cached .idea
git add .
git commit -m ".idea removed"
git push
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式
- git pull -rebase和git pull -ff-only之间的区别